变量作用域

-分类

  -全局(global):在函数外部定义:整个全局范围都有效

  -局部(local):在函数内部定义:仅在局部范围有效

-提升局部变量为全局变量

  -使用global

-globals,locals内建函数

 a = 1
b = 2
def fun(a,b):
c = 3
print("Locals = {0}".format(locals()))
print("Globals = {0}".format(globals())) #打印的不仅是a,b,还有其他所有的全局变量,包括python自带的
fun(a,b)

-eval()、exec()函数

  -把一个字符串当成一个表达式执行,eval()返回表达式执行后的结果,exec()返回None

  -语法

    eval(string_code, globals=None, locals=None)

    exec(string_code, globals=None, locals=None)

 x = 100
y = 200
z1 = eval("x+y")
z2 = exec("x+y")
print(z1) #
print(z2) #None #以下eval和exec结果相同
z1 = eval("print('x+y=:',x+y)") #x+y=: 300
z2 = exec("print('x+y=:',x+y)") #x+y=: 300
print(z1) #None
print(z2) #None

-递归函数

  -函数直接或者间接调用自身

  -python对递归深度有限制,超过限度报错

 #斐波那契数列,只考虑正常输入的n
def fib(n):
if n == 1 or n ==2:
return 1
return fib(n-2) + fib(n-1) print(fib(5))
 # 汉诺塔程序,只考虑正常输入
def hano(n, a, b, c):
"""
汉诺塔的的递归实现
:param n: 一共有n个盘子
:param a: 起始塔
:param b: 过渡塔
:param c: 目标塔
:return: None
"""
if n == 1:
#print(a, b, c, n,"*" * 30) 理解程序的调试语句
print(a, "-->", c)
return None
if n == 2: # 实际上该部分可以省略
#print(a, b, c, n,"*" * 20) 理解程序的调试语句
print(a, "-->", b)
print(a, "-->", c)
print(b, "-->", c)
return None
# 当n>=3时,把n-1个盘子借助c,从a移动到b上
#print(a, b, c, n-1,"*" * 10) 理解程序的调试语句
hano(n-1, a, c, b)
print(a, "-->", c)
# 而后把n-1个盘子,借助a,从b移动到c上
hano(n-1, b, a, c)
return None
a = "A"
b = "B"
c = "C"
n = 4
hano(n, a, b, c)

变量类型(内置数据结构)

-list(列表)

  -使用下标访问,从0开始:print(l[2])

  -分片操作:对列表进行任意一段的截取:print(l[1:3])

    -包含左不包含右:只取l[1]和l[2]

    -:左或者右不写,左边默认0,右边默认最后一个数据:print(l[:])

    -有步长,默认为1:print(l[1:6:3]),最后一个是步长,修改为3

    -下标可以超出范围,超出后不报错,不考虑多余的下标内容

    -下标为负数:表示从右往左,最后一个下标为-1。注意:分片截取左边值比右边大时,步长注意需要使用负数

  -一些常规操作

 l = [0,1,2,3,4,5,6]
print(l, "输出原始l")
last_ele = l.pop() #取出最后一个元素
print(last_ele, "输出取出的最后一个元素的值")
print(l, "输出被取出最后一个元素以后的l")
del l[2] #删除制定index元素
l.remove(0) #删除指定的值
print(l, "输出删除index为2,以及元素值为0后的l")
l.append(2) #追加元素
l.insert(3,"a") #插入元素,index前面
print(l, "输出追加元素值为2,以及在index=3前面插入a的l")
a = [7,8,9]
b = ["a","b","c"]
c = a + b #列表相加
print(c, "输出两个列表相加后的c")
d = a * 4 #乘
print(d, "输出乘4后的a")
n = 8
x = n in l #判断元素是否存在与列表中,x值一定是布尔值
print(x)
print(n in a)
print(n not in l)

  -遍历:for,while

  -双层列表/嵌套列表

 a = [["one", 1], ["two", 2], ["three", 3]]
for k,v in a:
print(k, "-->", v) a = [["one", 1, "一"], ["two", 2, "二"], ["three", 3, "三"]]
for k,v,w in a:
print(k, "-->", v, "-->", w)

  -列表内涵:list content

 a = [1,2,3,4,5,"a"]
b = [i*10 for i in a]
print(b) a = [x for x in range(1,35)]
# 过滤原来列表的内容
b = [m for m in a if m % 2 ==0]
print(b) a = [x for x in range(1,10)]
print(a)
b = [y for y in range(100,400) if y % 100 == 0]
print(b)
#列表生成可以嵌套
c = [m+n for m in a for n in b]
print(c)
#等价于
for m in a:
for n in b:
print(m+n, end=" ")
print() c = [m+n for m in a for n in b if m+n < 250]
print(c)

  -求列表长度:len(l);  最大值:max(l);最小值:min(l);强制转换:list(l);清空:l.clear();翻转:l.reverse();拼接:l1.extend(l2);查找列表中指定元素的个数:l.count(8);查看指定值的位置:x=l.index(8)

  -拷贝

    -浅拷贝:l2=l1.copy(),传值,只拷贝一层

    -深拷贝:待续

 a = [1,2,3,[4,5,6]]
b = a.copy()
print(id(a))
print(id(b)) #id(a)和id(b)不同
print(id(a[3][2]))
print(id(b[3][2])) #id(a[3][2)和id([3][2)相同

-set(集合)

  -元素无序,唯一不重复

  -集合的定义

 s = set()
s = {1,2,3,4,5,6,7}
print(type(s), s)

  -用法

    -成员检测:in,not in

    -向集合添加元素:add:s.add(“a”);移除集合中指定的值:s.discard(1100),删除不存在的值时不报错;随机移除一个元素:s.pop();

 s1 = {1,3,"a",5,6,7,8,9}
s2 = {1,3,"a",536,987,7}
s_i = s1.intersection(s2)
print("交集:", s_i) s_d = s1.difference(s2)
print("差集:", s_d) s_u = s1.union(s2)
print("并集:", s_u) s_isub = s1.issubset(s2)
print("检查一个集合是否为另一个子集:", s_isub) s_isup = s1.issuperset(s2)
print("检查一个集合是否为另一个超集:", s_isup)

  -集合内涵

    -自动过滤重复元素

  -很多用法同list

  -forzerset:冰冻集合:不能进行修改的集合,一种特殊集合

-dict(字典)

  -无顺序的数据组合,以键值对形式出现

 d = {"one":1, "two":2, "three":3}

  -常见操作

 d = {"one":1, "two":2, "three":3}
print(d["one"]) #访问键值
d["one"] = "一" #根据键修改值
print(d["one"])
del d["one"] #删除
print(d)
if "two" in d: #成员检测,检测的是键
print("key")
for k in d: #根据键访问键和值
#for k in d.keys(): #同上
print(k,d[k]) for v in d.values(): #只访问值
print(v) for k,v in d.items(): #不可以直接使用d,要用items表示键值对
print(k, "-->", v) print(d.get("ddse",18)) #根据指定键去值,键不存在不报错返回None,如果指定默认值(18),则返回默认值 #特殊函数fromkeys
l = ["a", "b", "c"]
d = dict.fromkeys(l, "") #只有两个参数,所有的键有相同的值
print(d)

  -其他用法和list类似

-tuple(元组)

  -元组可以看成不可以更改的list,可访问等

  -创建一个只有一个值的元组:t = (1,),注意要有逗号(有无括号均可)

  -两个变量交换值:a,b = b,a

Python学习过程笔记整理(四)的更多相关文章

  1. Python学习笔记整理(四)Python中的字符串..

    字符串是一个有序的字符集合,用于存储和表现基于文本的信息. 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3=""&quo ...

  2. Python学习过程笔记整理(一)

    编码方式 -Utf8编码方式:# -*- coding: utf-8 -*- 注释 -行注释 # -块注释 '''...'''或"""...""&qu ...

  3. Python学习过程笔记整理(二)

    程序三大结构 -顺序 -分支 -循环 分支 -语法: if 条件表达式: 语句 ... -双向分支 if 条件表达式: 语句 ... else: 语句 ... -多路分支 if 条件表达式: 语句 . ...

  4. Python学习过程笔记整理(三)

    函数 -函数使用 -函数需要先定义,定义不会执行函数 -使用函数,俗称调用 -定义函数 -格式:def 函数名称(参数=默认值):,函数名称不能用大驼峰,参数可以没有 -调用函数 -格式:函数名(参数 ...

  5. Python学习笔记(四)函数式编程

    高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...

  6. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  7. Python学习笔记(四)

    Python学习笔记(四) 作业讲解 编码和解码 1. 作业讲解 重复代码瘦身 # 定义地图 nav = {'省略'} # 现在所处的层 current_layer = nav # 记录你去过的地方 ...

  8. python学习笔记整理——集合 set

    python学习整理笔记--集合 set 集合的用途:成员测试和消除重复的条目,进行集合运算 注意:花括号或set()函数可以用于创建集合. 注意:若要创建一个空的集合你必须使用set(),不能用{} ...

  9. python 学习笔记整理

    首先自我批评一下,说好的一天写一篇博客,结果不到两天,就没有坚持了,发现自己做什么事情都没有毅力啊!不能持之以恒.但是,这次一定要从写博客开始来改掉自己的一个坏习惯. 可是写博客又该写点什么呢? 反正 ...

随机推荐

  1. Oracle判断表、列、主键是否存在的方法

    在编写程序时,数据库结构会经常变化,所以经常需要编写一些数据库脚本,编写完成后需发往现场执行,如果已经存在或者重复执行,有些脚本会报错,所以需要判断其是否存在,现在我就把经常用到的一些判断方法和大家分 ...

  2. September 21st 2017 Week 38th Thursday

    What fire does not destroy, it hardens. 烈火摧毁不了的东西,只会变得更坚固. The true gold can stand the test of fire, ...

  3. ZT 类模板Stack的实现 by vector

    *//*第3章 类模板 与函数相似,类也可以被一种或多种类型参数化.容器类就是一个具有这种特性的典型例子,它通常被用于管理某种特定类型的元素.只要使用类模板,你就可以实现容器类,而不需要确定容器中元素 ...

  4. 缓冲区溢出基础实践(二)——ROP 与 hijack GOT

    3.ROP ROP 即 Return Oritented Programming ,其主要思想是在栈缓冲区溢出的基础上,通过程序和库函数中已有的小片段(gadgets)构造一组串联的指令序列,形成攻击 ...

  5. Cent OS home下中文目录改成英文目录

    如果安装了中文版的Cent OS之后,root目录和home目录下会出现中文的路径名,如“桌面”.“文档”.“图片”.“公共的”.“下载”.“音乐”.“视频”等目录,这样在命令行上操作十分的不方便,需 ...

  6. Java虚拟机17:互斥同步、锁优化及synchronized和volatile

    互斥同步 互斥同步(Mutual Exclusion & Synchronization)是常见的一种并发正确性保证手段.同步是指子啊多个线程并发访问共享数据时,保证共享数据在同一时刻只能被一 ...

  7. SOJ4453 Excel列数 进制转换

    描述 我们都知道Excel的列数是用字母表示的,比如第1列对应A,第27列对应AA. 假设给定一个正整数n,你能给出它所对应的字母表示么? 输入格式 程序需要读入多个测试样例,每个测试样例中: 一个正 ...

  8. SDWC补题计划

    2018的寒假去了SD的冬令营,因为一班二班难度悬殊,对我很不友好,几乎什么也没学会,但是我把两个班的课件都存了下来,现在慢慢把两个班的例题以及课后题都补一补(毕竟冬令营的钱不能白花). 这些题目横跨 ...

  9. 3631. [JLOI2014]松鼠的新家【树形DP】

    Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在“树”上.松鼠想邀 ...

  10. ElasticSearch 通过nginx做HTTP验证

    在ElasticSearch 的设置文件中如果设置了 network.host: 0.0.0.0 则表示ElasticSearch 服务是公开的任何ip都可以访问ElasticSearch 服务.这样 ...