龙空技术网

python笔记分享(6)

鹿衔草啊 96

前言:

今天我们对“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形参