从0开始学python_每日笔记打卡_day5_函数

1.定义 函数:

def test01():
    print('sxtsxt')
test01()
c=test01
c()
sxtsxt
sxtsxt
  1. 全局变量和局部变量:如果想要在函数内部修改全局变量,需要用到global
a=3#全局变量
def test01():
    b=4#局部变量
    print(b*10)
    global a#如果要在函数内改变全局变量的值,增加global关键字声明
    a=300
    print(locals())#打印输出的局部变量
    print(globals())#打印输出的全局变量
test01()
print(a)
#40
#300
  1. 测试参数的传递
    传递可变对象
#测试参数的传递
#传递可变对象
a=[10,20]
print(id(a))
print(a)
print('********************')
def test01(m):
    print(id(m))
    m.append(300)
    print(id(m))
test01(a)

传递不可变对象

  1. 浅拷贝和深拷贝
#测试浅拷贝和深拷贝
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[2].append(7)
    print('深拷贝......')
    print('a',a)
    print('b',b)

testCopy()
print('************************')
testDeepCopy()

  1. 参数命名的几种方式
def test01(a,b,c,d):
    print('{0}-{1}-{2}-{3}'.format(a,b,c,d))

test01(10,20,30,40)#    位置参数
#test01(10,20) #参数个数不匹配,报错

test01(d=20,b=40,a=10,c=100)#命名参数,通过形参名称来匹配

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

10-20-30-40
10-40-100-20
2-3-10-15
2-3-4-15

  1. 可变参数

可变参数指的是“可变数量的参数”。分两种情况:

  1. *param(一个星号),将多个参数收集到一个“元组”对象中。
  2. **param(两个星号),将多个参数收集到一个“字典”对象中。
#可变参数,收入元组中
def f1(a,b,*c):
    print(a,b,c)
f1(8,9,19,20)

#可变参数,收入字典中
def f2(a,b,**c):
    print(a,b,c)
f2(8, 9, name='gaoqi', age=18)

多个参数,需要强制命名
def f3(a, b, *c, **d):
    print(a, b, c, d)
f3(8, 9, 20, 30, name='gaoqi', age=18)
  1. lambda 定义表达式
#测试lambda表达式、匿名函数
f=lambda a,b,c,d:a*b*c*d

def test01(a,b,c,d):
    return a*b*c*d

print(f(2,3,4,5))

120

#测试lambda表达式、匿名函数
f=lambda a,b,c,d:a*b*c*d

def test01(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=[test01,test01] #函数也是对象
print(h[0](3,4,5,6))

120
12

360

eval()函数
功能:将字符串 str 当成有效的表达式来求值并返回计算结果。

#测试 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)

递归函数:函数内部自己调用自己的函数

def test01(n):
    print('test01:',n)
    if n==0:
        print('over')
    else:
        test01(n-1)
def test02():
    print('test02')
    
test01(4)

test01: 4
test01: 3
test01: 2
test01: 1
test01: 0
over

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

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、付费专栏及课程。

余额充值