第13天:Python 函数的参数

定义一个函数非常简单,但是怎么定义一个函数,需要什么参数,怎么去调用却是我们需要去思考的问题。

如同大多数语言一样(如 Java),Python 也提供了多种参数的设定(如:默认值参数、关键字参数、形参等)。使用这些参数定义出来的代码,可以让我们适应不同的开放场景,也能简化我们的代码开发工作。

默认值参数

我们创建一个函数,定义参数中一个或多个赋予默认值后,我们可以使用比允许的更少的参数去调用此函数,举个例子(注意:以下代码都使用python3.7版本):

def def_param_fun(prompt, retries=4, reminder='Please try again!'): while True: ok = input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return False retries = retries - 1 if retries < 0: raise ValueError('invalid user response') print(reminder) # 我们可以如下进行调用def_param_fun('Do you really want to quit?')
def_param_fun('Do you really want to quit?', 2)
def_param_fun('Do you really want to quit?', 2, 'Please, yes or no!')

如上所示,我们可以使用一个或多个参数去调用此函数,我们实际生产中,很多情况下会赋予函数参数默认值的情形,因此,合理使用此种参数形式可以简化我们很多工作量。

重要:使用默认值参数时,如果我们的默认值是一个可变对象时,我们调用函数可能出现不符合我们预期的结果。如下:

def f(a, l=[]): l.append(a) return l # 此时调用函数print(f(1))print(f(2))print(f(3))
# 返回值# [1]# [1, 2]# [1, 2, 3]

这是由于函数在初始化时,默认值只会执行一次,所以在默认值为可变对象(列表、字典以及大多数类实例),我们可以如下操作:

def f(a, l=None): if l is None: l = [] l.append(a) return l
# 再次调用函数print(f(1))print(f(2))print(f(3))
# 返回值# [1]# [2]# [3]

可变参数

可变参数也就是我们对于函数中定义的参数是可以一个或多个可以变化的,其中 *args代表着可以传入一个list或者tuple, **args代表着可以传入一个dict。举个例子:

def variable_fun(kind, *arguments, **keywords): print("friend : ", kind, ";") print("-" * 40) for arg in arguments: print(arg) print("-" * 40) for kw in keywords: print(kw, ":", keywords[kw]) # 函数调用variable_fun("xiaoming", "hello xiaoming", "nice to meet you!", mother="xiaoma", father="xiaoba", son="see you") # 输出结果first arg: xiaoming ...----------------------------------------hello nice to meet you!----------------------------------------mother : xiaomafather : xiaobason : see you

我们还可以使用下面的方式进行调用,得到上面相同的结果:

list01 = ["hello xiaoming", "nice to meet you!"]dict01 = {'mother': 'xiaoma', 'father': 'xiaoba', 'son': 'see you'}variable_fun("xiaoming", *list01, **dict01)

以上其实是python的解包操作,和java类似。

关键字参数

关键字参数允许你调用函数时传入0个或任意个含参数名的参数,这样可以让我们灵活的去进行参数的调用。举个例子:

# 借用官网例子def key_fun(voltage, state='a stiff', action='voom', type='Norwegian Blue'): print("-- This key_fun wouldn't", action, end=' ') print("if you put", voltage, "volts through it.") print("-- Lovely plumage, the", type) print("-- It's", state, "!")
# 函数调用 key_fun(1000) # 1 positional argumentkey_fun(voltage=1000) # 1 keyword argumentkey_fun(voltage=1000000, action='VOOOOOM') # 2 keyword argumentskey_fun(action='VOOOOOM', voltage=1000000) # 2 keyword argumentskey_fun('a million', 'bereft of life', 'jump') # 3 positional argumentskey_fun('a thousand', state='pushing up the daisies') # 1 positional, 1 keyword

注意不可以重复传值,否则会报如下错误:

# TypeError: key_fun() got multiple values for argument 'voltage'key_fun(100, voltage=1000) # error

总结

本节主要简单的介绍了python中函数参数的使用,设定的方式可以配合使用,但是也不要过多的去设计,否则会造成函数的可读性变的很差。

代码地址

python中函数的参数设定[1]

参考资料

[1]

python中函数的参数设定: https://github.com/JustDoPython/python-100-day/tree/master/day-005

系列文章

第12天:Python 集合

第10天:Python类与对象

(0)

相关推荐

  • Python中的*args和**kwargs

    在Python中的代码中经常会见到这两个词 args 和 kwargs,前面通常还会加上一个或者两个星号.其实这只是编程人员约定的变量名字,args 是 arguments 的缩写,表示位置参数:kw ...

  • 教你一招 | Python: 函数参数魔法

    函数参数 在 Python 中,定义函数和调用函数都很简单,但如何定义函数参数和传递函数参数,则涉及到一些套路了.总的来说,Python 的函数参数主要分为以下几种: 必选参数 默认参数 可变参数 关 ...

  • python再谈函数

    python再谈函数

  • Python函数的基础学习

    Python函数的基础学习 一.函数分类 二.函数基本形式 三.形参与实参 1.定义理解 2.改变形对实参的影响 四.参数类型 1.位置参数 2.默认值参数 1.默认值参数位置问题 2.理解默认值参数 ...

  • python到底还有哪些函数我们还没见过?原来有这么多实用的函数

    本文将将主要介绍如下内容 函数介绍 1.1 函数的定义 所谓的函数,其实就是具有特定功能的一段代码块,都可以独立的运行 . 函数有5部分组成,分别是定义函数的关键字,函数的名字,圆括号(存放函数的参数 ...

  • 函数与Lambda表达式

    函数参数定义 # 学习人员:贾其豪# 开发时间:2021/1/31 14:05#函数定义默认值参数#函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参def fun(a,b=10): ...

  • Python之函数的定义与使用示例

    Python之函数的定义与使用示例,结合实例形式分析了Python函数的定义.参数.变量作用域.返回值等相关概念与使用技巧. Python定义函数使用def关键字,一般格式如下: def 函数名(参数 ...

  • python函数的参数类型总结

    定义函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号,然后在缩进块中编写函数体,函数的返回值用return语句返回. def power(x, n=2): ...

  • Python函数的参数是如何工作的?

    https://m.toutiao.com/is/Jwaod7L/ 我们先探讨在Python中如何将参数传递给函数的相关细节,然后回顾与这些概念相关的良好软件工程实践的一般理论. 通过了解Python ...

  • (8条消息) python函数注释 参数后面加冒号: 函数后面的箭头

    python的函数注释: def f(text:str,max_len:'int>0'=80) ->str:"""这个是函数的帮助说明文档,help时会显示& ...

  • Python|函数的参数

    前言定义函数的时候,我们只需要把参数的名字和位置确定下来,函数的接口定义就完成了.位置参数在power(x)中,x即为位置参数,调用该参数是有且只有一个参数求x²的函数,代码如下:>>&g ...

  • python函数的万能参数

    我们通过一个简单的事例来展示一下函数的万能参数,我们先写一个最简单的函数 def test(*args,**kwargs): print(args,kwargs) 然后定义两个变量 l = [1,2, ...

  • python:函数传参是否会改变函数外参数的值

    参考链接: https://blog.csdn.net/u012614287/article/details/57149290 https://blog.csdn.net/qq915697213/ar ...

  • 11个案例讲透 Python 函数参数

    接下来是正文. 1. 参数分类 函数,在定义的时候,可以有参数的,也可以没有参数. 从函数定义的角度来看,参数可以分为两种: 必选参数:调用函数时必须要指定的参数,在定义时没有等号 可选参数:也叫默认 ...

  • python函数传入数量可变参数

    def func(x,y,**kwargs): print(x,y,kwargs) func(x=2,y=1,3,4)#这样传入参数为错误,**需要赋值给一个变量名,然后传入为字典性形式func(x= ...