函数
什么是函数
- 函数代码块以 def 关键词开头,后接函数标识符名称和括号()。
- 任何传入参数和自变量必须放在括号中间。括号之间可以用于定义参数
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明
- 函数内容以冒号起始,并且缩进
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None,例:
def Myname(name):
"函数-我的名字“
print(name)
return
调用函数
def Myname(name):
"函数-我的名字"
print(name)
return
Myname("小明") #小明
name1 = Myname("小花") #小花
print(name1) # None
print(Myname.__doc__) #函数-我的名字,__doc__是函数的文档
函数参数
以下是调用函数时可使用的正式参数类型:
- 必备参数 : 须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
- 关键字参数 :关键字参数允许函数调用时参数的顺序与声明时不一致
- 默认参数 : 调用函数时,默认参数的值如果没有传入,则被认为是默认值
- 不定长参数 :一个函数能处理比当初声明时更多的参数
必备参数:
def People(name,age):
print("My name is {0} and age is {1}".format(name,age))
return
People("xiaoming",18) # My name is xiaoming and age is 18 ,name和age按照顺序输入
关键字参数:
def People(name,age):
print("My name is {0} and age is {1}".format(name,age))
return
People(age=18,name="xiaoming") # My name is xiaoming and age is 18 ,name和age可以不按照顺序输入
默认参数:
def People(name,age=18):
print("My name is {0} and age is {1}".format(name,age))
return
People("xiaoming") # My name is xiaoming and age is 18 ,age已经默认是18了,可以不用输入
不定长参数 :
*args - 可变参数,可以是从零个到任意个,自动组装成元组
**kw - 关键字参数,可以是从零个到任意个,自动组装成字典
def People(name,*args,**kw):
print(name)
print(args)
print(kw)
People("xiaoming",30,40,50,a=1,b=2,c=3)
输出结果为:
xiaoming
(30, 40, 50)
{'a': 1, 'b': 2, 'c': 3}
函数的返回值
def sumzhi(a,b):
return a+b
sumzhi(10,20) # 30
变量作用域
Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
定义在函数内部的变量拥有局部作用域,该变量称为局部变量。
定义在函数外部的变量拥有全局作用域,该变量称为全局变量。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
def sumzhi(dj,sl):
je = dj * sl
return je
dj1 = float(input("输出购买的单价:"))
sl1 = int(input("输出购买的数量:"))
je1 = sumzhi(dj1,sl1)
print("需要支付的金额为:%.2f"%je1)
输出结果为:
输出购买的单价:6
输出购买的数量:5
需要支付的金额为:30.00
- 当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
a = 0
def yz():
global a
print(a) #0
a=100
print(a) #100
yz()
print(a) #100
Lambda 表达式
ython 使用 lambda 关键词来创建匿名函数,而非def关键词,它没有函数名,其语法结构如下:lambda argument_list: expression,例:
a= lambda x:x**2
print(a(10)) #100
匿名函数 常常应用于函数式编程的高阶函数 (high-order function)中,主要有两种形式:
- 参数是函数 (filter, map)
- 返回值是函数 (closure)
filter(function, iterable) 过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换.
a= lambda x:x**2%2==0
b = filter(a,[1,2,3,4,5,6,7,8,9,10])
print(list(b)) #[2, 4, 6, 8, 10], 筛选出满足条件的值
map(function, *iterables) 根据提供的函数对指定序列做映射。
a= map(lambda x:x**2,[1,2,3,4,5])
print(list(a)) #[1, 4, 9, 16, 25]
学习地址为阿里天池的阿里天池龙珠计划python训练营,地址:https://tianchi.aliyun.com/s/bcfaedf7a7961e48effcc495bd5ee9d0