变量的作用域
(
全局变量和局部变量
)
print(locals()) #打印输出的局部变量print(globals()) #打印输出的全局变量global a #如果要在函数内改变全局变量的值,增加 global 关键字声明
参数的传递
可变对象有:
字典、列表、集合、自定义的对象等
不可变对象有:
数字、字符串、元组、function 等
浅拷贝和深拷贝
用内置函数:copy(浅拷贝)、deepcopy(深拷贝)。
浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。
深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象
参数的几种类型
位置参数、默认值参数、命名参数
可变参数
- *param(一个星号),将多个参数收集到一个“元组”对象中。
- **param(两个星号),将多个参数收集到一个“字典”对象中。
强制命名参数
在带星号的“可变参数”后面增加新的参数,必须在调用的时候“强制命名参数”。
lambda 表达式和匿名函数
lambda 表达式的基本语法如下:
lambda arg1,arg2,arg3... : <表达式>
arg1/arg2/arg3 为函数的参数。<表达式>相当于函数体。运算结果是:表达式的运算结果
f = lambda a,b,c,d:a*b*c*d
def test(a,b,c,d):
print("****")
return a*b*c*d
print(f(2,3,4,5))
g = [lambda a:a*2,lambda b:b*3]
print(g[0](6))
h = [test,test] #函数也是对象
print(h[0](3,4,5,6))
120
12
****
360
eval()函数
功能:将字符串 str 当成有效的表达式来求值并返回计算结果。
语法: eval(source[, globals[, locals]]) -> value
参数:
source:一个 Python 表达式或函数 compile()返回的代码对象globals:可选。必须是 dictionary
locals:可选。任意映射对象
s = "print('abcde')"
eval(s)
a = 10
b = 20
c = eval("a+b")
print(c)
dict1 = dict(a=100,b=200)
d = eval("a+b",dict1)
print(d)
abcde
30
300
递归函数
1. 终止条件
表示递归什么时候结束。一般用于返回值,不再调用自己
2. 递归步骤
把第 n 步的值和第 n-1 步相关联。
def factorial(n):
if n==1:
return 1
return n*factorial(n-1)
for i in range(1,6):
print(i,'!=',factorial(i))
1 != 1
2 != 2
3 != 6
4 != 24
5 != 120