函数
1.如何定义函数
>>>def MyFirstFunction():#定义函数
print('这是我创建的第一个函数')#设置函数
>>>MyFirstFunction()#使用函数
这是我创建的第一个函数
>>>def MySecondFunction(name):#定义带参数的函数
print (name + '我爱你')
>>>MySecondFunction('python')
python我爱你
>>> def add(num1,num2):
return (num1 + num2)#将函数运行的结果返回
>>> print(add(1,6))#实测不写print也能得出结果
7
2.函数的参数
>>> def SaySome(name,words):
print(name + '>' + words)
>>> SaySome('我','你')
我>你
>>> SaySome(words = '你',name = '我')
我>你
3.可变参数
可变参数就是传入的参数的个数是可变的(非固定)
在参数前加*,如*args,使用时可以输入一堆参数,也可以输入list或tuple(拆包语法:要在前面加*号,如*list),函数内接收到的其实是一个元组
>>> def test(*args):
print('参数长度',len(args))
print ('第二个参数',args[1])
>>> test(1,'我',3.14,5,6,7,8)
参数长度 7
第二个参数 我
ps:函数运行的结果本身不能保存,要借助return返回
4.关键字参数
参考自https://blog.csdn.net/zxy987872674/article/details/55252501?utm_source=app&app_version=4.9.1&code=app_1562916241&uLinkId=usr1mkqgl919blen
可变参数允许你传入任意个参数,这些可变参数在函数调用的时候自动组装为一个tuple。而关键字参数允许你传入任意个含参数名的参数,可以是一堆含参数名的参数如city=‘beijing’,也可以是一个字典(拆包语法:要在字典名前加**号,如**kw),这些参数会在调用函数时在内部自动组装为一个dict。定义函数时,一般形式为**kwargs。如:
def person(name,age,**kwargs):
print('name:',name,'age:',age,'other:',kwargs)
5.局部变量和全局变量
函数内定义的局部变量不能在外部使用;
外部定义的全局变量可以在函数内部使用,
但是函数内部不能对全局变量进行修改.
在函数内修改全局变量需要用global
>>> def myfun():
global count
count = 10
print(10)
>>> count = 5
>>> myfun()
10
>>> print(count)
10
6.内嵌函数
>>> def fun1():
print('fun1()正在被调用...')
def fun2():#注意:函数内定义的函数只能在函数内部使用
print('fun2()正在被调用...')
fun2()
>>> fun1()
fun1()正在被调用...
fun2()正在被调用...
7.闭包
>>> def funx(x):
def funy(y):
return x * y
return funy#注意这里不能加括号
>>> funx(2)(5)
10
>>> i = funx(2)#另一种方法
>>> i(5)
10
8.lambda表达式
>>> lambda x : 2 * x + 1
<function <lambda> at 0x000001E2EEA1AAF0>
>>> g = lambda x : 2 * x + 1
>>> g(5)
11
9.常用BIF
filter
此处操作失误导致笔记丢失,待未来补全
#利用lambda简化上个程序
>>> list(filter(lambda x: x%2,range(10)))#注意lambda语句本身是不具备带上对象:如range(10)的功能的
[1, 3, 5, 7, 9]
map
>>> list(map(lambda x : x * 2, range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
#主要目的是让lambda定义的函数后能加上范围,方便计算
10.递归
#写一个求阶乘的函数
#自己琢磨的
>>> def jiecheng (x):
y=x
while y!=1:
y=y-1
x=x*y
return x
#网课思路
>>>def test(n):
result=n
for x in range(1,n):
result *= x
return result
#递归思路
def test1(n):
if n == 1:#递归要有一个正确的返回条件
return 1
else:
return n*test1(n-1)#递归要有调用自身函数