一、函数
1.1 函数的定义
1. def 2. name(): 3. return
1.2 函数调用
定义函数之后,输入函数名调用函数可能需要实参。
def fun1(str):print(str)
fun1("你现在在干什么?")
fun1("现在你还做刚刚的事情吗?")
a = fun1('Hello')
print(a)
# 你现在在干什么?
# 现在你还做刚刚的事情吗?
# Hello
# None
def add(a, b):print(a + b)
add (1, 2)
#3
1.3 函数文档
写函数文档是为了让其他人更方便的阅读代码,利用__doc__调用函数,得到函数文档。
def MyFirstFunction(name):print('abc'.format(name))
MyFirstFunction('def')
print(MyFirstFunction.__doc__)
help(MyFirstFunction)abc
None
Help on function MyFirstFunction in module __main__:MyFirstFunction(name)
1.4 函数参数
形参是定义函数的时候小括号中的变量,如下面代码中的name,实参是调用函数时给的参数,如下面代码中的’小甲鱼’。
、
MyFirstFunction()
def MySecendFunction(name):print(name+'我爱你!')print(name + "我爱你!")
MySecendFunction('小甲鱼')
可变参数
可变参数就是可以给参数赋值。
def test(*S):'收集参数或者可变参数'print('参数的长度是:', len(S))print('参数的第三个参数是:', S[2])
test(1, 2, 3, 4, 5, 5, 6, 6, 2,4)参数的长度是: 10
参数的第三个参数是: 3
关键词参数
两者的区别就是哪个是可变参数,第一个情况nkw可以被赋值,故将其名与值作为字典;第二种情况则是未给*赋值,因此输出空。
'第一种'
def printinfo(arg1, *nkw, **kwargs):print(arg1)print(nkw)print(kwargs)
printinfo(70, nkw = 10, a = 1,b = 2)70
()
{
'nkw': 10, 'a': 1, 'b': 2}'第二种'
def printinfo(arg1, *,nkw, **kwargs):print(arg1)print(nkw)print(kwargs)
printinfo(70, nkw = 10, a = 1,b = 2)70
10
{
'a': 1, 'b': 2}
!!!注意!!! 定义函数之后加’:’ 符号全是英文小写 PyCharm有错误会灰色
1.5 函数返回值
函数的返回值是多样的,可以是整型、字符串、浮点型。定义时不加类型默认是元组。
def back():'返回值可以是多种'return[1, 'xiaojiayu', 3.15]
print(back())def back():return 1, 'xiaojiayu', 3.15
print(back())[1, 'xiaojiayu', 3.15]
(1, 'xiaojiayu', 3.15)
1.6 变量作用域
在函数里面的参数以及变量都是局部变量,函数被调用时通过栈存储,语句执行完后会自动清空,在函数外面定义的是全局变量。
内嵌函数
在一个函数内部再定义一个函数。
def fun1():print('fun1正在被调用')def fun2():print('fun2正在被调用')fun1()fun1正在被调用
fun2在外部不可被调用,只能在fun1中被调用。
闭包
def funx(x):def funy(y):return x*yreturn funyi = funx(4)
print(type(i))
print(i(6))
print(funx(5)(6))24
30
和数学中的函数嵌套一样,首先给了x的取值4,之后就是一个含参数y的函数,给y赋值求得结果。
递归
函数在内部调用自身本身。
def factorial(n):if n == 1:return 1else:return n * factorial(n - 1)
number = int(input('请输入一个正整数:'))
result = factorial(number)
print("%d 的阶乘是: %d" % (number, result))请输入一个正整数:10
10 的阶乘是: 3628800
计算兔子对数
def fab(n):if n < 1:print("输入有误")return -1if n ==1 or n == 2:return 1else:return fab(n-1) + fab(n-2)
result = fab(20)
if result != -1:print('一共有%d对兔子诞生!'% result)一共有6765对兔子诞生!
迭代
斐波那契数列
def fab(n):n1 = 1n2 = 1n3 = 1if n < 1:print('出错了')return -1while (n-2) > 0:n3 = n2 + n1n1 = n2n2 = n3n -= 1return n3
result = fab(20)
if result != -1:print("有%d对小兔崽子诞生了" % result)有6765对小兔崽子诞生了
二、lambda表达式
匿名函数的定义
不需要定义,一行就可以。简化代码,增加可读性。
a = lambda x: 2 * x + 1
print(a(5))11
匿名函数的应用
filter(过滤)
print(list(filter(None, [1, 0, False, True])))
print(list(filter(lambda x: x % 2, range(10))))[1, True]
[1, 3, 5, 7, 9]
map(映射)
print(list(map(lambda x: x * 2, range(10))))[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]