函数以def关键词开头,后接函数名和圆括号()。
def firstfunction():
print('创建函数')
firstfunction()
def function(name):
'函数定义过程中的name叫形参'#它只是一个形式,表示占据一个参数位置
print('传递进来的'+name+'叫做实参,它是具体的参数值')
function('wydl')
def function(name):
print(name+'我爱你')
function('ly')
def sum(a, b):
print(a+b)
sum(26,46)
从简到繁的参数形态如下:
位置参数:这些参数在调用函数时位置要固定。
默认参数:
def function(a='wydl',b=' ly'):
print(a+'->'+b)
function()
关键词参数:
def function(a,b):
print(a+'->'+b)
function(a='wydl',b='ly')
收集参数:
def test(*a):
print('参数的长度是:',len(a))
print('第二个参数是:',a[1])
test(26,'wydl')
命名关键字参数:用户想要输入的关键字参数,定义方式是在nkw 前面加个分隔符 *。
参数组合:参数定义的顺序必须是:
位置参数、默认参数、收集参数和关键字参数。
位置参数、默认参数、命名关键字参数和关键字参数
可以返回单个值,也可以返回多个值以列表或元组的形式,没有返回值则返回None
def sum(num1,num2):
return(num1+num2)
print(sum(26,46))
def function(name):
'函数定义过程中的name叫形参'#它只是一个形式,表示占据一个参数位置
print('传递进来的'+name+'叫做实参,它是具体的参数值')
print(function.__doc__)
Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
定义在函数内部的变量拥有局部作用域,该变量称为局部变量。
定义在函数外部的变量拥有全局作用域,该变量称为全局变量。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
def discounts(price, rate):
'函数中final_price,price,rate是局部变量'
final_price = price * rate
return final_price
old_price=float(input('请输入原价:'))
rate=float(input('请输入折扣率:'))
new_price=discount(old_price,rate)
'ole_price,rate,new_price是全局变量'
print('打折后价格是:'new_price)
当内部作用域想修改外部作用域的变量时,可以用global和nonlocal关键字。
def fun1():
print('fun1()正在被调用')
def fun2():
print('fun2()正在被调用')
fun2()
fun1()
是函数式编程的一个重要的语法结构,是一种特殊的内嵌函数。
如果在一个内部函数里对外层非全局作用域的变量进行引用,那么内部函数就被认为是闭包。
通过闭包可以访问外层非全局作用域的变量,这个作用域称为 闭包作用域。
def funX(x):
def funY(y):
return x * y
return funY
如果一个函数在内部调用自身本身,这个函数就是递归函数。
阶乘
def factorial(n):
if n == 1:
return 1
return n * fact(n - 1)
斐波那契数列
def recur_fibo(n):
if n <= 1:
return n
return recur_fibo(n - 1) + recur_fibo(n - 2)
lst = list()
for k in range(11):
lst.append(recur_fibo(k))
print(lst)
匿名函数
所谓匿名,即不再使用def语句定义一个函数。
python 使用 lambda 来创建匿名函数。
lambda 只是一个表达式,函数体比def简单很多。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
lambda 函数没有所谓的函数名 (function_header),这也是它为什么叫匿名函数。
g=lambda x:2*x+1
print(g(5))
g=lambda x,y:x+y
print(g(3,4))
过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换
print(list(filter(lambda x:x%2,range(10))))
map(function, iterable, …) 根据提供的函数对指定序列做映射。
print(list(map(lambda x:x*2,range(10))))