Python——函数使用

一、函数定义和函数文档注释
1.1 使用def语句自定义函数

# _*_ coding:utf-8 _*_
def test(name):
    print 'Hello'+name

运算结果:
=========RESTART: C:\Users\Mr_Deng\Desktop\test.py=========
>>> test('World')
HelloWorld
>>> 

1.2 给函数添加文档

# _*_ coding:utf-8 _*_
def test(x1,x2):
    'Calculate the sum of the two numbers'
    print x1+x2

运算结果:
=========RESTART: C:\Users\Mr_Deng\Desktop\test.py=========
>>> test(1,2)
3
>>> test.__doc__
'Calculate the sum of the two numbers'
>>> 

二、函数参数的修改
2.1 函数形参和实参
case1:

# _*_ coding:utf-8 _*_
def test_1(n):
    n='red'

运算结果:
=========RESTART: C:\Users\Mr_Deng\Desktop\test.py=========
>>> colour='green'
>>> test_1(colour)
>>> colour
'green'
>>> 

case2:

# _*_ coding:utf-8 _*_
def test_2(n):
    n[0]='red'

运算结果:
=========RESTART: C:\Users\Mr_Deng\Desktop\test.py=========
>>> colour=['green','yellow']
>>> colour
['green', 'yellow']
>>> test_2(colour)
>>> colour
['red', 'yellow']
>>> 

在C语言中已近知道形参与实参的关系,函数参数的传递有两种,一种是值传递,一种是传参数的地址。若仅就形式而言,上面所给的2个case貌似属于值传递,因此调用函数后形参的改变是不会改变实参的值得。但是,从结果可以看出,在第一个case中,函数条用结束后,实参的值没有发生改变;在第二个case中,函数条用结束后,实参的值发生了改变。原因何在,这跟Python的机制有关,在Python中字符串(以及数字和元组)是不可改变的,在函数条用中不能被修改,只能在函数外用新的值进行覆盖。可变的数据结构,例如列表和字典等做参数时,就可以在调用函数中对参数进行修改,其修改的结果也会影响实参的值,如case2所示。
既然在Python中并不是所有的实参通过修改形参来改变实参,那么对于不可变得数据类型,例如字符串、数字和元组怎样在函数中修改实参的值呢。有两种方法是可行的,一种是将形参的值在函数中返回,并将返回的结果重新赋值给实参;另一种是将参数值放到列表中。

# _*_ coding:utf-8 _*_
def test(x):
    return x+1
    运算结果:
=========RESTART: C:\Users\Mr_Deng\Desktop\test.py=========
>>> x=100
>>> x=test(100)
>>> x
101
>>> 

或者:

# _*_ coding:utf-8 _*_
def test(x):
    x[0]=x[0]+1

运算结果:
=========RESTART:C:\Users\Mr_Deng\Desktop\test.py=========
>>> x=[200]
>>> test(x)
>>> x
[201]
>>> 

2.2 改变函数的形参

# _*_ coding:utf-8 _*_

def init(data):
    data['first']={}
    data['middle']={}
    data['last']={}

def find(data,label,name):
    return data[label].get(name)

def storage(data,full_name):
    names=full_name.split()
    if len(names)==2:
        names.insert(1,'')
    labels='first','middle','last'
    for label,name in zip(labels,names):
        result=find(data,label,name)
        if result:
            result.append(full_name)
        else:
            data[label][name]=[full_name]

运算结果:
=========RESTART: C:\Users\Mr_Deng\Desktop\test.py=========
>>> myList={}
>>> init(myList)
>>> storage(myList,'Robin Hood')
>>> storage(myList,'Robin Jack Chen')
>>> find(myList,'first','Robin')
['Robin Hood', 'Robin Jack Chen']
>>> find(myList,'middle','')
['Robin Hood']
>>> 

事实上,利用Python中可变的数据结构在函数中修改实参的值可以使操作变得简单,程序编写更加规范,而且可以提高代码的利用效率。上面的程序的功能是将一个人的名字按照英文名字的习惯进行拆分,并存储到字典中,用户可用通过名字的firstName、middleName或者lastName检索字典中的全民,也可以检索指定类型(first、middle或者last)中含有某个字段所有复合要求的全名。
三、关键字参数和默认值
在上面涉及到的函数参数属于位置参数,调用函数时给定值得顺序要与定义的函数参数列表标尺一致,否则可能使程序结果出错。Python中有关键字参数的概念,使用关键字参数,可以明确每个参数的作用,而且与参数的顺序没有太大的关系。

# _*_ coding:utf-8 _*_
def test(name,greeting):
    print greeting+name

运算结果:
=========RESTART: C:\Users\Mr_Deng\Desktop\test.py=========
>>> test(name='Jack',greeting='Hello!')
Hello!Jack
>>> test(greeting='Hi',name='Bob')
HiBob
>>> 

指定默认参数值:

# _*_ coding:utf-8 _*_
def test_1(name='World',greeting='Hello '):
    print '%s,%s!'  % (greeting,name)

运算结果:
=========RESTART: C:\Users\Mr_Deng\Desktop\test.py=========
>>> test_1()
Hello ,World!
>>> test_1(greeting='Hi !',name='Bob')
Hi !,Bob!
>>> 

位置参数与关键字参数混合使用:

# _*_ coding:utf-8 _*_
def test_2(name ,string='World',greeting='Hello '):
    print '%s,%s,%s!'  % (name,greeting,string)

运算结果:
=========RESTART: C:\Users\Mr_Deng\Desktop\test.py=========
>>> test_2('Bob')
Bob,Hello ,World!
>>> test_2('Bob',greeting='Hi',string='sky')
Bob,Hi,sky!
>>> 

四、收集参数
4.1 函数中收集任意多个参数,在参数前加上*,将所有的参数值放到同一个元组中

# _*_ coding:utf-8 _*_
def test_3(title,*fun):
    print title
    print fun

运算结果:
=========RESTART: C:\Users\Mr_Deng\Desktop\test.py=========
>>> test_3('par:',1,2,3)
par:
(1, 2, 3)
>>> 

4.2 使用**返回一个字典

# _*_ coding:utf-8 _*_
def test_4(**fun):
    print fun

运算结果:
=========RESTART:C:\Users\Mr_Deng\Desktop\test.py=========
>>> test_4()
{}
>>> test_4(x=1,y=2)
{'y': 2, 'x': 1}
>>> 

五、反转过程

# _*_ coding:utf-8 _*_
def test_5(**dict):
    print dict['english']+' is '+dict['num']

运算结果:
=========RESTART:C:\Users\Mr_Deng\Desktop\test.py=========
>>> dic={'english':'one','num':'1'}
>>> test_5(**dic)
one is 1
>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值