Python函数

作者: 直到世界的尽头_yifan | 来源:发表于2017-12-17 22:28 被阅读0次

Python的函数定义非常简单,但灵活度非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。
1.位置参数
def power(x):
return x*x
对于power(x)函数,参数x就是一个位置参数。
当我们调用power函数时,必须传入有且仅有的一个参数x:

power(2)
4
power(10)
100

def power(x,n):
s = 1
while n > 0:
n = n - 1
print('before:',s)
s = sx
print('after:',s)
return s
2.默认参数
def power(x,n=2):
s = 1
while n > 0:
n = n -1
s = s
x
return s
注意:(1)必选参数在前,默认参数在后,否则Python解释器会报错
(2)如何设置默认参数,当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面,变化小的参数可以作为默认参数,这样可以降低函数调用的难度

注意:定义默认默认参数必须指向不变对象
大家反复调用使用默认参数看看结果如何
def add(L=[]):
L.append('End')
return L

原因:Python函数在定义的时候,默认参数L的值就是被计算出来的,即[],因为L是一个变量,它指向对象L,每次调用该函数,如果改变了L的内容,则在下次调用的时候,默认参数内容就变了

对上面的例子做好修改:
def add(L=None):
if L is None:
L=[]
L.append('End')
return L

3.可变参数
在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是多个,还可以是0个。
要定义Python函数,我们可以确定输入的参数,由于参数个数不确定,我们可以想到使用list或tuple传进来,例子:
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n
return sum

cacl([1,2,3])
6
cacl((1,2,3))
6
也可以简写如下:
cacl(1,2,3)
6

我们把以上例子修改为可变参数:
def cacl(*numbers):
sum = 0
for n in numbers:
sum = sum + n
return sum

定义可变参数和定义list或tuple参数相比,仅仅在参数前面加了个*号。

cacl(1,2,3)
6
cacl()
0

最常见的的写法:

nums=[1,2,3]
cacl(*nums)
6
总结:可变参数允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple

4.关键字参数
关键字参数允许传入0个或任意个包含参数名的参数,这些关键字参数在函数内部自动组装为一个dict,实例:
def person(name,age,**mn):
print('name:',name,' age:',age.' other:',mn)
函数person除了接收参数name和age之外,还接受关键字参数mn。在调用该函数时,可以只传入必选参数:

person('peter',29)
name:peter age:29 other:{}

也可以传入关键字参数:

person('peter',29,city='nanjing')
name:peter age:29 other:{'city':'nanjing'}
关键字函数有什么作用?可以扩展函数的功能

和可变函数类似,我们可以先组装一个dict,然后把dict转换为关键字参数传进去:

infos=['city':'nanjing','job':'engineer']
person('peter',29,**infos)
name:peter age:29 other:{'city':'nanjing','job':'engineer'}
infos表示把infos这个dict的所有的key-value用关键字参数传入到函数的person的mn参数,mn将获得一个dict字典数据类型,注意mn获得到的是一个mn的一份拷贝,对mn的改动不会影响到函数外的dict类型变量infos。

5.命名关键字参数
对于关键字参数,函数的调用者可传入任意不受限制的关键字参数;如果需要限制关键字参数的名字,也就是dict的key,就可以用命名关键字参数,例如city和job作为命名关键字参数,定义的函数如下:
def person(name,age,,city,job):
print(name,age,city,job)
和关键字参数不同,命名关键字参数需要一个符号分隔符
,*后面的参数被视为命名关键字参数。
调用方式如下:

person('Peter',27,city='nanjing',job='engineer')
Peter 27 nanjing engineer

如果函数定义中有了一个可变参数,后面的命名关键字参数就不需要一个特殊分隔符了:
def person(name,age,
args,city,job):
print(name,age,args,city,job)

注意:命名关键字参数必须传入参数名,这和第1条的位置参数参数不同

命名关键字参数可以有缺省值,从而简化调用:
def person(name,age,*,city='nanjing',job):
print(name,age,city,job)

所以我们可以这样调用:

person('peter',29,job='engineer')
peter 29 nanjing engineer

使用命名关键字参数时,特别注意,如果没有可变参数,就必须加一个作为特殊分隔符。如果缺少,Python解释器兼顾无法识别位置参数和命名关键字参数。

相关文章

  • Python - 2017/01/28-函数

    调用python内置函数 函数名(参数) 即可调用python内置函数 help(函数名) 返回python对于函...

  • Python函数式介绍一 - 高阶函数

    Python函数式介绍一 - 高阶函数Python函数式介绍二 - 链式调用 最近为了给朋友推广Python函数式...

  • Python高阶函数学习笔记

    python中的高阶函数是指能够接收函数作为参数的函数 python中map()函数map()是 Python 内...

  • Python学习笔记1

    Python注释 Python变量 Python运算符 Python输入输出 输入函数 输出函数(3.x) ...

  • Python:内置函数

    python的内置函数,匿名函数 内置函数 内置函数就是python给你提供的,拿来直接用的函数,比如print,...

  • 二级Python----Python的内置函数及标准库(DAY

    Python的内置函数 嵌入到主调函数中的函数称为内置函数,又称内嵌函数。 python的内置函数(68个) Py...

  • python3 range() 函数和 xrange() 函数

    python3 range 函数 python3 取消了 xrange() 函数,并且和 range() 函数合并...

  • 7、函数

    1、Python之什么是函数 2、Python之调用函数 Python内置了很多有用的函数,我们可以直接调用。 要...

  • Python入门

    Python3教程 安装Python 第一个Python程序 Python基础 函数 高级特性 函数式编程 模块 ...

  • Python函数详解

    函数是Python里组织代码的最小单元,Python函数包含以下几个部分: 定义函数 调用函数 参数 函数的返回值...

网友评论

    本文标题:Python函数

    本文链接:https://www.haomeiwen.com/subject/isiuwxtx.html