美文网首页
Python函数的参数

Python函数的参数

作者: 小学弟_ | 来源:发表于2018-07-15 09:32 被阅读0次

函数的参数:

先来安利一下:定义函数的时候,我们把参数的名字和位置确定下来,函数的接口就定义完了。

对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数返回什么样的值就够了,

函数内部的复杂逻辑被封装起来,调用者无需了解。

Python的函数定义非常简单,但是却非常灵活。除了正常定义的必选参数外,还可以使用默认参数,

可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化

调用者的代码。

只要函数执行到return 函数就会停止执行

# 1. 每个函数如果在函数中不写return, 默认返回None

# 2. 我们也可以只写一个return, 也是返回None, 停止函数的执行

# 3. return 一个返回值.  你在调用方能接受到一个返回值

# 4. return 多个返回值. 多个值需要用,隔开  接收的位置. 接收的是元组.

# 函数return返回多个值以元祖(tuple)存储

1.位置参数

deffun(a):

returna+a

print(fun(3))#6

对于fun(a)函数,参数a就是一个位置参数。

当我们调用fun函数时,必须传入有且仅有的一个参数x

deffun(x,n)

x = x **n

return x

print(fun(2,4))#16

x和n,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次付给参数x和n

2.默认参数

deffun(x,n=2):

x = x **n

return x

print(fun(2))#4

print(fun(2,4))#16

默认参数可以简化函数的调用。设置默认参数时,需注意:

1)必选参数在前,默认参数在后,否则python解释器会报错

2)如何设置默认参数:当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。

变化小的参数就可以作为默认参数。

使用默认参数有什么好处呢:最大的好处就是能够降低调用函数的难度。

注意:默认参数的一个坑

例子:

defadd(l=[]):

l.append('a')

return  l

#正常调用时,结果正常

print(add([1,2,3]))#[1, 2, 3, 'a']

print(add([5,4,3]))#[5, 4, 3, 'a']

#当使用默认参数调用时,一开始结果还正确,可是再此调用就不对了

print(add())#['a']

print(add())#['a', 'a']

原因解释:

Python函数在定义的时候,默认参数l的值就被计算出来了,即[],因为默认场参数l也是一个变量,

                    他指向对象[],每次调用函数,如果改变了l的内容,则下次调用时,默认参数的内容就变了,不再

                    是函数定义时的[]了。

注:定义默认参数要记牢一点:默认参数必须指向不变对象。

解决上述问题:

defadd(L=None):

ifLisNone:

L=[]

L.append('a')

returnL

3.可变参数

deffun(*n):

    sum =0

    foriinn:

        sum += i

    returnsum

print(fun(1,2,3))#6

lis = [1,2,3]

print(fun(*lis))#6

tu = (1,2,3)

print(fun(*tu))#6

注意:由于参数不确定,所以我们就传入一个可变参数*n,Python允许你在list或tuple前面加一个*号,

        把list或tuple的元素变成可变参数传进去。

4.关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。

        而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

defperson(name, age, **kw):

print('name:', name,'age:', age,'other:', kw)

person('Michael', 3)#name: Michael age: 3 other: {}

person('A', 4, g='M', j='E')#name: A age: 4 other: {'g': 'M', 'j': 'E'}

关键字参数有什么用?:它可以扩展函数的功能。比如,在person函数里,我们保证能接收到name和age这两个参数,

            但是,如果调用者愿意提供更多的参数,我们也能收到。试想你正在做一个用户注册的功能,除了用户名和年龄

            是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。

 5.命名关键字参数:

<1>

对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。

defperson(name, age, **kw):

print('name:', name,'age:', age,'other:', kw)

person('JackChen',20, city='shanghai', addr='shanxi', zipcode=123)

<2>

如果要限制关键字参数的名字,就可以用命名关键字参数.

例如,只接收city和job作为关键字参数。这种方式定义的函数如下:

defperson(name, age, *, city, job):

print(name, age, city, job)

#和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,

#*后面的参数被视为命名关键字参数。

person('Jack',20, city='Beijing', job='Engineer')#Jack 20 Beijing Engineer

<3>

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符

*了:

defperson(name, age, *args, city, job):

print(name, age, args, city, job)

#命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错.

person('Jack', 20, 'Beijing', 'Engineer')

#Traceback (most recent call last):

# File "", line 1, in

#TypeError: person() takes 2 positional arguments but 4 were given

由于调用时缺少参数名city和job,Python解释器把这4个参数均视为位置参数,

但person()函数仅接受2个位置参数。

<4>

命名关键字参数可以有缺省值,从而简化调用:

defperson(name, age, *, city='Beijing', job):

print(name, age, city, job)

person('Jack', 20, job='Engineer')#Jack 20 Beijing Engineer

注意:使用命名关键字参数时,要特别注意,如果没有可变参数,

就必须加一个*作为特殊分隔符。如果缺少*,

Python解释器将无法识别位置参数和命名关键字参数

参数组合:

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,

            这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:

            必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

相关文章

  • python基础-07-函数

    python基础-函数 1.函数的定义 例子: 2.python中函数的参数详解 必备参数demo: 默认参数de...

  • Python的参数

    Python的参数函数的参数

  • python 函数参数类型

    本文主要学习内容: python函数参数类型 python 的函数参数类型分为4种:1.位置参数:调用函数时根据函...

  • python:函数说明

    Python: 函数参数魔法 2016-12-01 函数参数 在 Python 中,定义函数和调用函数都很简单,但...

  • python---函数参数

    python---函数参数 在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参...

  • python函数

    python函数 什么是函数 函数语法 调用函数 函数参数形参与实参传参指定参数传参参数默认值可变参数参数解包参数...

  • Python - 2017/01/28-函数

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

  • Python高阶函数学习笔记

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

  • 深入函数参数

    函数参数 Python允许具有可变长参数的函数。使用*args作为函数参数,可以将任意数量的参数传递给该参数。然后...

  • Python函数的参数

    函数的参数: Python函数的参数目前有五种 位置参数 def get_name(age) 位置参数是按照函数定...

网友评论

      本文标题:Python函数的参数

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