python入门第六节(变量、参数的传递、浅拷贝和深拷贝、参数的类型、lambda表达式、eval()函数、递归函数)

变量
参数的传递
浅拷贝和深拷贝
参数的类型
lambda表达式
eval()函数
递归函数

变量在这里插入图片描述

全局变量在这里插入图片描述
局部变量

在这里插入图片描述

#测试全局变量、局部变量
a=3  #全局变量

def test01():
    b=4  #局部变量
    print(b*10)
    a=300
    print(a)  #打印局部变量下的a

test01()
print(a)  #打印全局变量下的a


#结果
40
300
3
#测试全局变量、局部变量
a=3  #全局变量

def test01():
    b=4  #局部变量
    print(b*10)
    global  a   #如果要在函数内改变全局变量的值,需要增加global关键字声明
    a=300
    

test01()
print(a)  #打印全局变量下的a

#结果
40
300
#测试全局变量、局部变量的效率

import math
import time
def test01():
    start=time.time()
    for i in range(10000000):
        math.sqrt(30)
    end=time.time()
    print("耗时{0}".format((end-start)))

def test02():
    start=time.time()
    b=math.sqrt   #定义一个局部变量
    for i in range(10000000):
        b(30)
    end=time.time()
    print("耗时{0}".format((end-start)))

test01()
test02()

#结果
耗时1.1194298267364502
耗时0.8801467418670654

参数的传递

在这里插入图片描述

#测试参数的传递
#传递可变对象

a=[10,20]
print(id(a))
print(a)
print("*********************")

def test01(m):
   print(id(m))
   print(m)
   m.append(300)
   print(id(m))
   print(m)


test01(a)

#结果
1602837827912
[10, 20]
*********************
1602837827912
[10, 20]
1602837827912
[10, 20, 300]
#测试参数的传递
#传递不可变对象

a=100
print(id(a))
print(a)
print("*********************")

def test01(m):
   print("m:",id(m))   #传递进来的是a对象的地址
   print(m)
   m=m+200             #由于a是不可变对象,因此创建新的对象m
   print("m:",id(m))   #m已经变成了一个新的对象
   print(m)


test01(a)
print("a:",id(a))

#结果

1626896544
100
*********************
m: 1626896544
100
m: 2202538847984
300
a: 1626896544

浅拷贝和深拷贝

在这里插入图片描述

#测试浅拷贝、深拷贝

import copy
def testCopy():
    '''测试浅拷贝'''
    a = [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)

def testDeepCopy():
    '''测试深拷贝'''
    a = [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)

testCopy()
testDeepCopy()

#结果
a: [10, 20, [5, 6]]
b: [10, 20, [5, 6]]
浅拷贝....
a: [10, 20, [5, 6, 7]]
b: [10, 20, [5, 6, 7], 30]
a: [10, 20, [5, 6]]
b: [10, 20, [5, 6]]
深拷贝....
a: [10, 20, [5, 6]]
b: [10, 20, [5, 6, 7], 30]

在这里插入图片描述

#传递不可变对象时,不可变对象里面包含的子对象是可变的,则方法内修改了这个可变对象,源对象也发生了改变

a=(10,20,[5,6])
print("a:",id(a))

def test01(m):
    print("m:",id(m))
    m[2][0]=888
    print(m)
    print("m:", id(m))
test01(a)
print(a)

#结果
a: 2126467278312
m: 2126467278312
(10, 20, [888, 6])
m: 2126467278312
(10, 20, [888, 6])

参数的类型

位置参数
在这里插入图片描述
默认值参数
在这里插入图片描述
命名参数
在这里插入图片描述

#测试参数的类型:位置参数、默认值参数、命名参数

def test01(a,b,c,d):
    print("{0}-{1}-{2}-{3}".format(a,b,c,d))
def test02(a,b,c=10,d=15):   # 默认值参数必须位于其他参数后面
    print("{0}-{1}-{2}-{3}".format(a, b, c, d))

test01(10,20,30,40)  #位置参数
#test01(15,20,30)  #参数个数不匹配,报错
test01(d=20,c=10,b=30,a=40)  #命名参数,通过形参名称来匹配

test02(2,3)
test02(12,5,6)

#结果
10-20-30-40
40-30-10-20
2-3-10-15
12-5-6-15

可变参数
在这里插入图片描述
强制命名参数
在这里插入图片描述

#测试参数的类型:可变参数、强制命名参数
def f1(a,b,*c):
    print(a,b,c)

def f2(a,b,**c):
    print(a,b,c)

def f3(a,b,*c,**d):
    print(a,b,c,d)

def f4(*a,b,c):
    print(a,b,c)

f1(8,9,15,20)
f2(8,9,name='li',age=18)
f3(8,9,20,15,name='li',age=18)
f4(2,b=4,c=5)

#结果
8 9 (15, 20)
8 9 {'name': 'li', 'age': 18}
8 9 (20, 15) {'name': 'li', 'age': 18}
(2,) 4 5

lambda表达式

在这里插入图片描述

#测试lambda表达式、匿名函数

f= lambda a,b,c:a*b*c
print(f(1,2,3))
g=[lambda a:a*2,lambda b:b*3]
print(g[0](6),g[1](8))

#结果
6
12 24

eval()函数

在这里插入图片描述

#测试eval()函数
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

递归函数

在这里插入图片描述

#测试递归函数的基本原理

def test01(n):
    print("test01:",n)
    if n==0:
        print("over")
    else:
        test01(n-1)
    print("test01***",n)

test01(4)

#结果
test01: 4
test01: 3
test01: 2
test01: 1
test01: 0
over
test01*** 0
test01*** 1
test01*** 2
test01*** 3
test01*** 4
#使用递归函数计算阶乘

def factorial(n):

    if n==1:
       return 1
    else:
        return n*factorial(n-1)


result=factorial(5)
print(result)

#结果
120
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值