day6 函数内存底层分析等

1、对象
在python中一切都是对象,使用def函数定义一个函数实际也是创建了一个对象
2、全局变量、局部变量
变量:a=3,这里的a就是一个变量
ex:a3 ‘’‘a为全局变量,因为a在整个函数都可发挥作用’’’
def ass():
b=4 ‘’'b为局部变量,因为b只在def这个函数中起作用‘’‘
print(b*10)

在函数内部,优先使用局部变量,在整个大的函数里面只能使用全局变量
查找所有局部变量的方法:print(locals())
查找所有全局变量的方法:print(globals())
**局部变量比全局变量效率高,尽量用局部变量

3、参数的传递

ex:
b=[12,20]
print(“b1”,id(b))
def f2(m):
print(“m”,id(m))
m.append(25)

f2(b)
print(“b”,id(b))
print(b)
outcome:
b1 1961179231816
m 1961179231816
b 1961179231816
[12, 20, 25]
b1的id和b的id是一样的,说明参数传递不会改变参数的id

(4)位置参数
参数的位置必须一一对应:
ex: def f1(a,b,c)
print(a,b,c)
f1(2,3)——会报错,因为a\b\c是三个变量,但是2,3只是两个参数

(5)默认值参数
我们可以为某些参数设置默认值,这样,其再传递时是可选的。称为默认值参数,默认值参数放到位置参数后边
ex:
def f1(a,b,c=20,d=21):
print(a,b,c,d)

f1(8,0)
f1(8,9,0)
f1(7,8,9,0)
outcome:
8 0 20 21
8 9 0 21
7 8 9 0

(6)命名参数
和位置参数对应,根据名字而不是位置来匹配:
(7)可变参数

(8)强制命名参数
即在有一个可变参数的时候,要把不可变参数命名,否则会报错(系统搞不清楚在这些变量当中那个归于可变参数)
(9)lambda表达式和匿名参数

语法:
f=lambda a,b,c:a+bc
print(f(1,2,3))
outcome: 7
or
g=[lambda a:a
4,lambda b:b*2,lambda c:c+1234]
print(g0,g1,g2)
outcome: 28 4 0

(10)eval函数用法
(11)递归函数
如果不设终止条件的话,那么此程序会无限循环下去,最终,电脑会报错。
def test(n):
print(“test”,n)
if n0:
print(“over”)
else:
test(n-1)
test(10)
outcome:
test 10
test 9
test 8
test 7
test 6
test 5
test 4
test 3
test 2
test 1
test 0
over
上面这行代码表示什么我就不说了,重点讲一下下面这行代码:
def test(n):
print(“test”,n)
if n
0:
print(“over”)
else:
test(n-1)
print(“test***”, n)
test(10)
这行代码表示:先执行除了“print(“test***”, n)”之外的所有代码,n由10一直降到0,之后再执行“print(“test***”, n)”,由于之前n由10降到0时产生了11位数,所以“print(“test***”, n)”会将这11位数一一执行。由此产生结果:
test 10
test 9
test 8
test 7
test 6
test 5
test 4
test 3
test 2
test 1
test 0
over
test*** 0
test*** 1
test*** 2
test*** 3
test*** 4
test*** 5
test*** 6
test*** 7
test*** 8
test*** 9
test*** 10
(12)用递归函数计算阶乘:
要用到factorial函数,此函数表示计算阶乘
语法:
def factorial(n):
if n==1:
return 1 #要注意这里是1,不是0
else:
return n*factorial(n-1)

print(factorial(10))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值