|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Gabber 于 2017-8-20 00:29 编辑
函数
0. 函数的创建和调用:
创建,def 函数名(): 代码块
>>> def MyFirstFunction():
print("这是我创建的第一个函数!")
print("我还是很激动的!")
print("学习学习学习学习学习!")
调用,函数名()
>>> MyFirstFunction() #调用过程是往上找,如没有找到函数定义过程即报错!
这是我创建的第一个函数!
我还是很激动的!
学习学习学习学习学习!
1. 函数的参数,即函数名() '()'里的内容,参数使函数可变、个性化。
1)参数可以是多个,用' , '隔开(建议参数不要太多,3/4个已经很多)
>>> def MySecondFunction(name):
print(name + 'I Love U')
>>> MySecondFunction('盼盼')
盼盼I Love U
>>> def add(num1,num2):
result = num1 + num2
print(result)
>>> add(2,4)
6
2)形参、实参
形式参数(parameter),函数创建、定义过程中括号中的参数
实际参数(argument),函数调用过程中传递进去的参数
>>> def MyFirstFunction(name):
'函数定义过程中的name叫形参'
#因为TA只是一个形式,表示占据一个参数的位置
print('传递进来的'+name+'叫做实参,因为TA是具体的参数值!')
>>> MyFirstFunction('Gabber')
传递进来的Gabber叫做实参,因为TA是具体的参数值!
3)关键字参数,在函数调用时,通过参数名制定需要赋值的参数,避免因参数顺序错乱导致达不到预期效果
>>> def SaySome(name,words):
print(name + '->' + words)
>>> SaySome('小甲鱼','让编程改变世界!')
小甲鱼->让编程改变世界!
>>> SaySome('让编程改变世界!','小甲鱼') #参数顺序错乱
让编程改变世界!->小甲鱼
>>> SaySome(words='让编程改变世界!',name='小甲鱼') #加入关键参数
小甲鱼->让编程改变世界!
4)默认参数,即定义了默认值的参数,在函数定义过程中,为形参赋初始值,如函数调用时未传递参数便会自动找默认值代替
>>> def SaySome(name='小甲鱼',words='让编程改变世界!'):
print(name + '->' + words)
>>> SaySome()
小甲鱼->让编程改变世界!
5)收集参数(可变参数,在参数前加*) ,格式:def test(*params)
如要在收集参数后加其它参数,在调用函数时须使用关键字参数制定(其它建议设置成默认参数)
>>> def test(*params,exp):
print('参数的长度:',len(params),exp)
print('第二个参数是:',params[1])
>>> test(1,'Hello',3,4,7,8,exp='0000') #使用关键字参数
参数的长度: 6 0000
第二个参数是: Hello
>>> def test(*params,exp='Python'): #收集参数后边的其它参数设置默认值,程序不会报错
print('参数的长度:',len(params),exp)
print('第二个参数是:',params[1])
>>> test(1,'Hello',3,4,7,8)
参数的长度: 6 Python
第二个参数是: Hello
2. 函数的返回值:
使用关键字,return
>>> def add(num1,num2):
return (num1 + num2)
>>> print(add(34,33))
67
函数可以返回多个值
>>> def back():
return [1,2,'Python',5]
>>> back()
[1, 2, 'Python', 5]
3. 函数文档:函数名.__doc__(函数的默认属性) / help(函数名) 可查看函数属性
4. 函数(有返回值)与过程(procedure,无返回值)(Python只有函数没有过程)
函数若无返回值时,返回None
局部变量,函数内的变量,作用域是函数内;
全局变量,函数外的变量,作用域是整个模块,勿在函数内修改全局变量值(可访问);
5. global关键字,可将函数内局部变量转为全局变量
>>> count = 5
>>> def MyFun():
global count
count = 10
print(count)
>>> MyFun()
10
>>> print(count)
10
6. 内嵌(嵌套)函数
内部函数作用域,只在其外部函数之内。(以下fun2作用域仅在fun1内)
>>> def fun1():
print('fun1正在被调用...')
def fun2():
print('fun2正在被调用...')
fun2()
>>> fun1()
fun1正在被调用...
fun2正在被调用...
7. 闭包(closure),内部函数对外部作用域(其外部函数内)的变量进行引用,该内部函数即闭包。
>>> def funX(x):
def funY(y):
return x * y
return funY #funY是闭包
>>> funX(8)(5)
40
>>> i = funX(8)
>>> i(5)
40
8. nonlocal,可在内部函数中将外部的局部变量转为非局部变量(作用域为其外部函数内)
>>> def Fun1():
x = 5
def Fun2():
nonlocal x
x *= x
return x
return Fun2()
>>> Fun1()
25
9. lambda表达式,创建匿名函数
优点,节省定义函数过程、使得代码精简、不需要考虑命名问题、简化代码的可读性
格式,lambda 函数参数:返回值
>>> lambda x : x * 2
<function <lambda> at 0x020B0420>
>>> g = lambda x : x * 2
>>> g(8)
16
10. 新BIF
filter(function or None, iterable),过滤器,两个参数
第一个参数可以是function(函数)或None对象,第二个参数是可迭代数据;
功能:如果第一个参数是函数的话,将第二个可迭代数据里的每一个元素作为函数的参数进行计算,
把返回True的值筛选出来,并生成一个列表
如果第一个参数是None的话,将第二个可迭代数据里为True的值筛选出来
>>> filter(None,[0,1,False,True])
<filter object at 0x02091FB0>
>>> list(filter(None,[0,1,False,True]))
[1, True]
>>> list(filter(lambda x : x%2,range(10))) #筛选奇数的过滤器
[1, 3, 5, 7, 9]
map(function or None, iterable),映射,两个参数(function(函数),可迭代序列)
功能:将序列的每一个元素作为函数的参数进行运算加工,直至序列的所有元素加工完毕,
返回所有加工后的元素构成的新序列
>>> list(map(lambda x : x*2,range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] |
评分
-
查看全部评分
|