第六天递归、匿名函数、推导式、变量存储、模块

全局变量:生存周期,整个文件;函数内部、外部都能使,在函数前面后面定义都ok
def fun():
print(a+10)
a = 10
fun()

全局变量和局部变量同名:新开辟空间了,并不是重新赋值
a = 10
print(id(a))
def fun():
a = 20
print(id(a))
fun()

global 在函数内部声明使用的是全局变量,尽可能放上面
下面代码报错了、

a = 10
print(id(a))
def fun():
a = 20
print("内20",id(a))
global a
a = 15
print("内15",id(a))
fun()
print(a)
print(id(a))
global b

函数内使用全局变量,如果不用global声明,则只能使用,不能修改;声明过之后才能修改

匿名函数:只能做简单的事,就是个表达式
匿名函数格式:
1、函数名字 = lambda 形参1, 形参2, 形参 ... : 返回值
函数名字(实参1, 实参2, 实参...)
2、实参 = ( lambda 形参1, 形参2, 形参... : 返回值 ) (实参1, 实参2, 实参...)

写法1:
fun = lambda num1, num2 : num1 + num2
print( fun(num = 1, num= 2))
写法2:
ret_val = (lambda num1,num2: num1 + num2) (3,4)
print(ret_val)
递归关键:1、找递归的公式 例:4*(n-1)!
2、找递归的出口
3、自己调用自己

def step (形参):
#递归出口:
if n == 1:
return 1
else:
骚操作
return 公式( 骚操作 运算符 step(对形参的骚操作))
调用step()

for推导式:把for后变量放for()里循环,然后每次循环得到for前变量,再把for前变量放列表里
关键:for 前的是放列表的,for 后的是放循环体里的,for外的[] 不要丢
例 把x 放到列表里循环100次,把i 放到range()里循环100次
lists = [ x for i in range(1,101)]

for if 推导式: for 的后循环要满足 if 条件才能得到for 前变量

注:for 前 for 后可以是同一变量
for 后与列表无关可以用来代替
lists = ["*" for
in range(8)]
lists = [2 * i for i in range(1,9)]
lists = [ x for i in range(1,101) if x % 2 ==0]
lists = [ i for i in range(1,101) if i % 2 ==0]
lists = [ i*2 for i in range(1,11) if i % 2 ==0]
混合使用
例:
print((lambda
a:[i**2 for i in a])(2,3,4))

扫描二维码关注公众号,回复: 2469909 查看本文章

引用
a引用该空间数据

a = 1000
print(id(a))
a = 10 100
print(id(a))
b = 10
print(id(b))
b = 10
10
print(id(b))

a开了俩空间,b开了一个空间
python缓存池:放地址 将-5~256之间的数的地址放入缓存池,用了在取出

str1 = "hellopython"
print(id(str1))
str2 = "hello"+"python"
print(id(str2))
str1 = "hellopythonhello×××"
print(id(str1))
str2 = "hellopython"+"hellopython"
print(id(str2))

python缓存池:放地址 将0~20个字符之间的字符的地址放入缓存池,用了在取出

lists = [10,20,30]
print(id(lists))
lists.append(40)
print(id(lists))
dicts = {"names":"张三"}
print(id(dicts))
dicts["age"] = 18
print(id(dicts))

列表、字典没有缓存池,列表、字典不管怎么加,用append/remove等,地址都一样,不会新开辟;但是,切片和a = [1,2,3],b = [1,2,3] 是新开辟,可用 is 判断,if a is b,就没新开辟,如果不是,就新开辟了

可变类型:该类型可以在存储空间修改内容
不可变类型:该类型不可以在存储空间修改内容
不可变:int、str、float、tuple

模块:任意.py文件,要求放同一目录下,不然不好使,讲包之后就好使了。别起中文
使用方法:import 文件名(模块名,不加.py)
模块名.函数名
相当于把另外文件所有都拷过来

while True 无限循环,不叫死循环,二者区别:一个故意设的,一个是写错了

while 5 也ok,相当于while bool(5),也是True

猜你喜欢

转载自blog.51cto.com/13901400/2152374
今日推荐