变量的作用域
参数的传递
从实参到形参的赋值,引用传递。
-
可变对象,直接作用于原对象本身
-
不可变对象,生出新的对象空间
可变对象有:字典、列表、集合、自定义对象等
不可变对象:数字、字符串、元组、function等
浅拷贝和深拷贝
浅拷贝:不拷贝子对象的内容,只拷贝引用
深拷贝:子对象的内存也全部拷贝,子对象修改不影响源对象
参数的几种类型
位置参数
按照位置传递的参数
默认值参数
为某些参数设置默认值,这些参数传递时可选。
命名参数
按照形参的名称传递参数
可变参数
可变数量的参数
-
*,将多个参数收集到一个’元组’对象中。
-
**,将多个参数收集到一个’字典’对象中。
强制命名参数
lambda表达式
lambda表达式可以用来声明匿名函数。只允许包含一个表达式,不能包括复杂语句。该表达式的计算结果就是函数的返回值。
lambda 形参1,形参2,形参3: <表达式>
运算结果是表达式的运算结果
f= lambda a,b,c:a+b+c
print(f(2,3,4))
eval()函数
执行一个字符串
eval(source[,globals[,locals]])
globals:可选,必须是字典
locals:可选,任意映射对象
递归函数
递归函数,类似于数学归纳法。
每个递归函数必须包含两个部分:
-
终止条件
-
递归步骤
栈先进后出
递归函数阶乘计算
def factorial(n):
if n ==1:
return 1
else:
return n*factorial(n-1)
result = factorial(5)
print(result)