变量作用域和列表
- 变量作用域
- 变量按照作用域分类
- 全局变量: 在函数外部定义
- 局部变量:在函数内部定义
- 变量的作用范围
- 全局变量:在整个全局都可以用,在局部也可以使用
- 局部变量只能在所在的函数内部使用,例如形参
- LEGB原则
- L(local) 局部
- E(Elclosing function locale) 外部嵌套函数作用域
- G(Global module) 函数定义所在模块作用域
- B(Buildin) python内置模块的作用域 - 提升局部变量为全局变量
- 使用global
-需要注意的是,需要先用global进行变量提升,然后在对变量进行赋值等操作,函数必须在调用之后,被提升的变量才可以使用
a1 = 100 def fun(): global a2 b2 = 200 fun() #只有在函数被调用后,提升的变量才能变成全局 print(b2)
- globals() 与 locals() 函数
- 用来显示局部变量和全局变量a = 1 def fun(b): e = 100 print('globals is {0}'.format(globals())) print('locals is {0}'.format(locals())) fun(200)
- eval() 函数
- 把字符串当成一个表达式来执行
eval(string_code, globals=None, locals=None) globals和locals参数是可选的,如果提供了globals参数,那么它必须是dictionary类型;如果提供了locals参数,那么它可以是任意的map对象。
恶意代码 : eval("__import__('os').system('dir')")
x = 1 y = 2 z = eval("x+y") print(z) # 3
- exec() 函数
- 将字符串当成代码执行,但是不返回结果,同样可以用来执行恶意代码 - 递归函数
- 函数直接或间接调用自身
- 好处:简洁,容易理解
- 缺点:消耗资源大
- 对递归深度有限制,超过限制报错
- 写递归程序的时候要 ===> 注意结束条件
# 递归调用深度限制代码 x = 0 def fun(): global x x += 1 print(x) #函数调用自己 fun() fun()
- 斐波那契数列:一列数字,第一个值是1 ,第二个值是1,从第三个开始,每一个数字的值等于前两个数字的值的和
- f(1) = 1 f(2) = 1 f(n)=f(n-1)+f(n+1)
- 1 1 2 3 4 8 13 ...
def fun(n): if n == 1: return 1 if n == 2: return 1 return fun(n - 1) + fun(n - 2) print(fun(6)) # 8
- 汉诺塔问题
假设有一个盘子 n = 1,A >C
两个盘子 n = 2,A>B A>C B>C
三个盘子 n = 3,把A上的两个小盘子移动到B上,把A上剩下的一个大盘子放到C上,把B上的两个盘子,借助A放到C上去
n个盘子 把A上的n-1个盘子,借助C移动到B上,把A上剩下的最后一个大盘子,放到C上,把B上n-1个盘子,借助A放到C上
def hannuota(n, a, b, c): """ n 代表盘子的个数 a ,代表第一个托盘, b 是第二个托盘 c 是第三个托盘 """ if n == 1: print(a,'--->',c) #if n == 2: # print(a,'--->',b) # print(a,'--->',c) # print(b,'--->',c) # return None hannuota(n-1, a, b, c) print(a, '--->', c) hannuota(n-1, b, a, c) a = 'A' b = 'B' c = 'C' hannuota(10,a,b,c)
-
- 内置数据结构(变量类型)
- list 列表 [1,2]
- tuple 元组 (1,2,'a')
- dict 字典 {'a':1, 'b':2}
- set 集合
--- list 创建列表 a = list() a =[]
- 分片操作:实际上是新生成了一个list
- 对列表进行任意一段的截取
- list[indexStart : indexEnd : stride] 截取开始,截取结束,截取长度 结果不包含截取结束
- list[1:3]、 list[:3]、 list[:]、list[2:] list[::-1] 可以将列表倒序
- 规定:从右向左数 最右边第一个下标为 -1 , 左边的值要小于右边的值,默认是从左向右进行分片,如果左边的值必须大于右边的值,则步长必须为负数
列表的增删改:
- 增 append()方法 a.append(1)
- 删 del del a[0] : 将下标为0的元素删除
- 改 a[2] = 'b'
- 列表相加 就是将列表接在一起 a=[0] b=[1] a+b => [0,1]
- 列表与一个整数相乘,相当于整数个列表相加
- 列表成员资格运算:判断一个元素是否在列表中,关键词 in/not in ,例如: a=[1,2,3] b=3 c = b in a =>c =True
- 列表嵌套: a = [[1,2],[3,4],[5,6]]
for k,v in a: #这样使用有条件 列表中的每个列表的长度必须一致,for后面的变量必须与列表中的列表的元素个数一致
print(k,'------',v)
- 列表内涵 list content
- 将列表中的每个元素乘以10生成一个新的列表 a = [1,2,3] b = [i*10 for i in a] print(b)
- 过滤掉原来列表中的某个(些)元素,生成一个新的列表
- a = [i for i in range(100)] b = [i for i a if m%2 == 0] print(b) #将a列表中的偶数放入到一个新的列表中
- 列表生成式可以嵌套
- a = [i for i in range(1,5)] b = [j for j in range(100,400) if j%100==0] c = [m+n for m in a for n in b] print(c)
- 列表的相关函数 len(list) 列表的长度 | max(list) 列表的最大值 | list() 将其他格式的转换为list格式
- 内置数据结构(变量类型)
-
- 内置函数 id() 显示一个变量或者数据的唯一确定的编号
本文来自博客园,作者:弟弟救我啊,转载请注明原文链接:https://www.cnblogs.com/Abelte/p/9602715.html