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

全局变量:生存周期,整个文件;函数内部、外部都能使,在函数前面后面定义都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))

引用
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

原文地址:http://blog.51cto.com/13901400/2152374

时间: 2024-10-31 14:54:47

第六天递归、匿名函数、推导式、变量存储、模块的相关文章

JS里面匿名函数的调用 & 变量作用域的实验

参考 http://www.educity.cn/wenda/54753.html 已实验验证结果正确. 1.下列哪些正确?(B.C) A.function(){ alert("Here!"); }(); B.(function(){ alert("Here!"); })(); C.(function(){ alert("Here!"); }()); 下面也已经实验验证结果正确. 2.下列哪个结果是正确的?(A.B.C.D) A.(functio

函数递归、列表推导式

1.递归(函数自己调用自己) #递归的话,最多循环999次 #用递归的话,必须得有一个明确的结束条件 2.列表推导式 =====> eg:1000之内的偶数   原文地址:https://www.cnblogs.com/URNOTBENBEN/p/9278927.html

4/2 三元表达式/函数递归/匿名函数/内置函数

三元表达式 def max2(x,y) if x > y: return x else return y res=max2(10,11) 三元表达式仅应用于: 1 条件成立返回一个值 2 条件不成功返回一个值 def max2(x,y): return x if x>y else y print (max2(2,10)) 10 函数递归:函数的递归调用,即在函数调用的过程中,又直接或间接地调用了函数的本身. 直接调用 def foo(): print ('fffff') foo() 间接调用

递归,匿名函数

# import sys #模块# sys.getrecursionlimit() #递归最大层数为1000层.#sys.setrecursionlimit() #修改递归层数 # def foo():#直接调用# print("fore you") #执行# foo() #调用函数,当第一遍结束之后才会关闭,第一次调用执行到目前的foo()调用进入第二次调用,# 而第一的次调用结束但是没有关闭,是继续开着的与第二次调用互相关联# foo()#调用函数 # def bre():#间接调

函数递归+匿名函数+内置函数day15

一.函数递归 什么是函数递归: 函数递归调用是一种特殊的嵌套调用,在调用一个函数的过程中,又直接或间接地调用了该函数本身. 其中,函数的递归有明确的结束条件,不能无限制的调用,否则会撑破内存,在Python中限定递归最多调用1000层. 1000层这个值是大概的数值,这个数值可以通过Python内置的功能进行更改. 递归必须要有两个明确的阶段: 递推:一层层递归调用下去,强调每次进入下一次递归,问题规模都在减小 回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推,开始一层层回溯 其中,

匿名函数访问外部变量有gc

直接上测试代码: using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestStructGC : MonoBehaviour { public struct StructDef { public System.Action act; public StructDef(System.Action callback) { act = callback; } } pub

[沫沫金]JS匿名函数this调用变量报错

背景 今天使用Dcloud扫码功能,success成功方法设置data中的scanContext变量,报"undefined"! 思路 一.怀疑是扫码内容不是JSON对象,无法点属性报错.排除,使用JSON.parse转换成功后,依然报"undefined".二.怎么就"undefined"呢,百思不得其解.继续想办法 解决 突然,看到附件选择的方法,人家是设置的this.fileUrl成功的.比对下,什么区别.发现定义的匿名方法,写法不同.我的

递归/匿名函数/三元表达式/列表生成式/字典生成式/二分算法

让在下揭开尔等的面纱,一探究竟:) >>>递归: 递归是一个往复的过程,也就是由两个过程组成,一个是计算过程,一个是将值层层返回的过程,递归的奇妙之处,就在于自身调用自身,然后,过程遵循由复杂到简单,最终满足相应条件后,退出,返回结果.说了一大堆,不过直接上代码: test_list = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]] res = 0 def sum_list(test_list, res): f

python --递归--匿名函数--枚举--xlwt模块--redis--mysql--加密解密

知识点一.递归 def fun(): num = int(input('输入内容')) if num%2 == 0: print('偶数') return else: fun()fun() 知识点二.匿名函数 #匿名函数#f = lambda x,b:str(x+b)#入参:返回值#(0,30)补零,map()循环函数,str(x).zfill(2)补零result = list(map(lambda x:str(x).zfill(2),range(1,30)))print(result) #枚

12. 函数-推导式

一.列表推导式 1. 语法格式 [ 结果 for 变量 in 可迭代对象 if 条件 ] 2. 代码示例 # 100以内能被3整除的数的平方 gen = [i * i for i in range(100) if i % 3 == 0] for num in gen: print(num) 二.生成器推导式 1. 语法格式 ( 结果 for 变量 in 可迭代对象 if 条件 ) 2. 代码示例 # 100以内能被3整除的数的平方 gen = (i * i for i in range(100)