python函数是从下往上找,写完函数要在最后面调用
def MyFirsFunction():
print('这是我创建的第一个函数')
print('激动')
MyFirsFunction()
函数的参数
def MySecondFunction(name):
print(name+'傻子')
MySecondFunction('滕胖胖')
def add(num1,num2):
result = num1 + num2
print(result)
add(2,3)
pycharm里会有提示,要给参数值
return
def add(num1,num2):
return (num1 + num2)
print(add(2,3))
加[ ]打印的是列表
def back():
return [1,'滕胖胖',2.14]
print(back())
不加[ ]默认打印的是元组
def back():
return 1,'滕胖胖',2.14
print(back())
形参和实参
其中name为形参,只是占据一个参数位置,具体的参数值是实参,因为他是具体的函数值。
函数文档
没打印出来,不知道为啥
def MyFirstFunction(name):
'函数定义过程中的name是形参'
print('传递进来的'+name+'叫实参,因为他是具体的参数值')
MyFirstFunction.__doc__
收集参数
def test(*params):
print('参数的长度是:',len(params))
print('第二个参数是:',params[1])
test(123,'滕胖胖',2.14,234)
*params是收集参数
函数变量的作用域
局部变量:其中final_price 是局部变量,定义在discounts函数中,函数结束后即释放。
全局变量:其中old_price,rate,new_price是全局变量,可以在任何位置打印出来,不会报错。
def discounts(price,rate):
final_price = price * rate
return final_price
old_price = float(input('请输入商品价格:'))
rate = float(input('请输入商品折扣:'))
new_price = discounts(old_price,rate)
print('打折后的价格为:','%.2f'%new_price)
如果在函数内部修改全局变量,python会自动创建一个与全局变量名字一样的局部变量进行代替,函数结束后,全局变量仍然的原来的值。不要在函数内部修改全局变量的值。
def discounts(price,rate):
final_price = price * rate
old_price = 50
print('修改后的old_price的值是1:',old_price)
return final_price
old_price = float(input('请输入商品价格:'))
rate = float(input('请输入商品折扣:'))
new_price = discounts(old_price,rate)
print('修改后的old_price的值是2:',old_price)
print('打折后的价格为:','%.2f'%new_price)
例题:
alist = []
def flower():
for each in range(100,1000):
if (int(str(each)[0]))**3+(int(str(each)[1]))**3+(int(str(each)[2]))**3==each:
alist.append(each)
print(alist)
flower()
内嵌函数和闭包
def Fun1():
x = 5
def Fun2():
nonlocal x
x *= x
return x
return Fun2()
Fun1()
print(Fun1())
用nonelocal来声明变量x不是局部变量,仍然看成是全局变量。
lambda表达式
g = lambda x: 2*x+1
print(g(5))
等价于
def ds(x):
return 2 *x +1
print(ds(5))
也就是lambda后面跟着参数,然后加冒号:,再加返回值。
lambda作用:可以省下函数第一过程,不用考虑命名的问题;简化代码的可读性
BIF
filter()
print(list(filter(None,[1,0,True,False])))
过滤掉非true(或者说是非1)的值
def odd(x):
return x % 2
temp = range(10)
show = filter(odd,temp)
print(list(show))
用lambda实现
g = lambda x:x %2
temp = range(10)
show = filter(g,temp)
print(list(show))
print(list(filter(lambda x:x %2,range(10))))
map映射
print(list(map(lambda x:x*2,range(10))))
欧几里得算法,实现求最大公约数
def gcd(a,b):
#while b 相当于b≠0时,条件成立,循环得以进行下去
while b:
c = a%b
a = b
b = c
else:
print('b≠0')
return a
print(gcd(34,0))