龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > python编程 >

Python入门篇之函数(6)

时间:2014-10-21 11:49来源:网络整理 作者:网络 点击:
分享到:
复制代码 代码如下: name='Mrs.Entity' try_to_change(name) name 'Mrs.Entity' def change(n): n[0]='Mr.Gumby' name=['Mrs.Entity','Mrs.Thing'] change(name) name ['Mr.Gumby', 'Mrs.Thing'] 参数发生

复制代码 代码如下:

>>> name='Mrs.Entity'
>>> try_to_change(name)
>>> name
'Mrs.Entity'
>>> def change(n):
      n[0]='Mr.Gumby'

>>> name=['Mrs.Entity','Mrs.Thing']
>>> change(name)
>>> name
['Mr.Gumby', 'Mrs.Thing']

参数发生了改变,这就是和前面例子的重要区别

以下不用函数再做一次:

复制代码 代码如下:

>>> name=['Mrs.Entity','Mrs.Thing']
>>> n=name  #再来一次,模拟传参行为
>>> n[0]='Mr.Gumby' #改变列表
>>> name
['Mr.Gumby', 'Mrs.Thing']

当2个变量同时引用一个列表的时候,它们的确是同时引用一个列表,想避免这种情况,可以复制一个列表的副本,当在序列中做切片的时候,返回的切片总是一个副本,所以复制了整个列表的切片,将会得到一个副本:

复制代码 代码如下:

>>> names=['Mrs.Entity','Mrs.Thing']
>>> n=names[:]
>>> n is names
False
>>> n==names
True

此时改变n不会影响到names:

复制代码 代码如下:

>>> n[0]='Mr.Gumby'
>>> n
['Mr.Gumby', 'Mrs.Thing']
>>> names
['Mrs.Entity', 'Mrs.Thing']
>>> change(names[:])
>>> names
['Mrs.Entity', 'Mrs.Thing']

关键字参数和默认值

参数的顺序可以通过给参数提供参数的名字(但是参数名和值一定要对应):

复制代码 代码如下:

>>> def hello(greeting, name):
        print '%s,%s!'%(greeting, name)
>>> hello(greeting='hello',name='world!')
hello,world!!

关键字参数最厉害的地方在于可以在参数中给参数提供默认值:

复制代码 代码如下:

>>> def hello_1(greeting='hello',name='world!'):
      print '%s,%s!'%(greeting,name)

>>> hello_1()
hello,world!!
>>> hello_1('Greetings')
Greetings,world!!
>>> hello_1('Greeting','universe')
Greeting,universe!

若想让greeting使用默认值:

复制代码 代码如下:

>>> hello_1(name='Gumby')
hello,Gumby!

可以给函数提供任意多的参数,实现起来也不难:

复制代码 代码如下:

>>> def print_params(*params):
      print params

>>> print_params('Testing')
('Testing',)
>>> print_params(1,2,3)
(1, 2, 3)

混合普通参数:

复制代码 代码如下:

>>> def print_params_2(title,*params):
      print title
      print params

>>> print_params_2('params:',1,2,3)
params:
(1, 2, 3)
>>> print_params_2('Nothing:')
Nothing:
()

 星号的意思就是“收集其余的位置参数”,如果不提供任何供收集的元素,params就是个空元组

但是不能处理关键字参数:

精彩图集

赞助商链接