鱼C论坛

 找回密码
 立即注册
查看: 1778|回复: 0

[技术交流] 《零基础入门学习Python》17-21 函数

[复制链接]
发表于 2017-8-14 22:45:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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]

评分

参与人数 1鱼币 +6 收起 理由
小甲鱼 + 6

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-3 07:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表