前言:
今天我们对“python形参”可能比较讲究,咱们都需要剖析一些“python形参”的相关资讯。那么小编在网摘上收集了一些对于“python形参””的相关内容,希望小伙伴们能喜欢,朋友们快快来了解一下吧!变量的作用域
全局变量:作用域为定义的模块局部变量:在函数体中声明的变量,优先使用局部变量
#测试全局变量,局部变量a=3def test01(): b=4 print(b*10)test01()print(a)
运行结果:
输出局部变量和全局变量的方式
locals()打印输出的局部变量globals()打印输出的全局变量
局部变量和全局变量的效率测试
import mathimport timedef test01(): start=time.time() for i in range(1000000): math.sqrt(30) end = time.time() print("耗时{0}".format((end-start)))def test02(): b=math.sqrt start=time.time() for i in range(1000000): b(30) end = time.time() print("耗时{0}".format((end-start)))test01()test02()
运行结果:
参数的传递:
函数的参数传递本质上就是:从实参到形参的赋值操作。python中产生的传递都是“引用传递”,不是“值传递”。具体操作时分为两类
可变对象:字典、列表、集合、自定义的对象等不可变对象:数字、字符串、元组、function等
1.传递可变对象
#测试参数的传递,传递可变对象a=[10,20]print(id(a))print(a)def test01(m): print(id(a)) m.append(30) print(id(m))test01()print(a)
运行结果:
2.传递不可变对象
传递参数是不可变对象,实际传递的还是对象的引用
浅拷贝和深拷贝
浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象
#浅拷贝import copya=[10,20,[5,6]]b=copy.copy(a)print("a",a)print("b",b)b.append(30)b[2].append(7)print("浅拷贝。。。")print("a",a)print("b",b)
运行结果:
#深拷贝import copya=[10,20,[5,6]]b=copy.deepcopy(a)print("a",a)print("b",b)b.append(30)b[2].append(7)print("深拷贝。。。")print("a",a)print("b",b)
运行结果:
传递不可变对象时,不可变对象里面包含的子对象是可变的,则方法内修改了这个可变对象,源对象也发生了变化
参数的几种类型
1.位置参数: 通过个数和形参匹配,按位置传递的参数
2. 默认值参数: 为某些参数设置默认值,这样这些参数在传递时就是可选的,默认值参数放到位置参数后面
3. 命名参数: 可以按照形参的名称传递参数
可变参数:
1.一个星号,将多个参数收集到一个“元组”对象中
2.两个星号,将多个参数收集到一个“字典”对象中
强制命名参数:
带星号的“可变参数”,后面增加新的参数,必须是“强制命名参数”
def f1(*a,b,c): print(a,b,c)#f1(2,3,4) #报错,因为a是可变参数,将2,3,4全部收集,造成b和c没赋值f1(2,b=3,c=4)
运行结果:
lambda表达式和匿名函数
1.lambda表达式可以用来声明匿名函数。
2.lambda函数实际生成了一个函数对象
3.lambda表达式只允许包含一个表达式,不能包含复杂语句
【操作】lambda表达式使用
f=lambda a,b,c:a+b+cprint(f)print(f(2,3,4))
运行结果:
eval()函数
功能;将字符串str当成有效的表达式来求值并返回计算结果
s="print('abcedf')"eval(s)a = 10b = 20c = eval("a*b")print(c)print("---------------")dict1 = dict(a=100,b=200)d = eval("a+b",dict1)print(d)
运行结果:
递归函数
自己调用自己的函数,在函数体内部直接或间接的自己调用自己。
#测试递归函数def test01(): print("test01") test02()def test02(): print("test02")test01()
运行结果:
递归函数必须包含两个条件:
1.终止条件
2.递归步骤
def test01(n): print("test01",n) if n==0: print("over") else: test01(n-1)def test02(): print("test02")test01(4)
运行结果:
练习:
【操作】用递归函数计算阶乘
def factorial(n): if n==1: return 1 else: return n*factorial(n-1)result = factorial(6)print("6的阶乘是:",result)
运行结果:
标签: #python形参