python函数 位置参数,关键字参数,可变参数优先级

def fun(arg,args=1,*arg,**keywords):

python 一共有这四类参数,第一类最常见,不用多说,第二类,关键字参数,python能通过关键字找到参数,python函数的这种特性使得函数参数更加灵活,不一定要按顺序来传,第三类:一个星号是将非关键字参数收集起来,以tuple的形式保存,第四类则必须要提供”传递参数名=传递参数值”形式传递参数。

至于怎么传,相信大家都知道,这里不多说。

要说明的是在python2中这四类参数传递时是有优先顺序的,不管是定义函数,还是传递参数时都有这个顺序问题。

下面是今天被 问到的问题:

 1 def Fun(*param,base=3):
 2     result = 0
 3     for each in param:
 4         result += each
 5
 6     result *= base
 7
 8     print(‘result is ‘, result)
 9
10 Fun(5,1, 2, 3, 4,base=5)

报错:

def Fun(*param,base=3):
                      ^
SyntaxError: invalid syntax

按照我上面的说法,这样很明显是不对的,即顺序不对。那么是不是把base,param对调就行了呢?显然不是,上面已经说明,在传递参数时,优先级同样适用。所以

Fun(base=5,5,1, 2, 3, 4,5)这样传递时仍然是不行的,因为顺序不对嘛。这就有点尴尬嘛,要想同时兼顾两者,一种解决办法是:Fun(5,5,1, 2, 3, 4,5)注:上面代码中的问题在Python3中好像进行了优化,不存在语法错误了。
时间: 2024-12-05 17:34:02

python函数 位置参数,关键字参数,可变参数优先级的相关文章

python--关键字参数/可变参数--内置函数--时间模块--常用模块

---恢复内容开始---关键字参数/可变参数 知识点一.内置函数 def send_msm2(*args): #可变参数,参数组 print('phone',args)send_msm2()#返回值为元组 def send_msm2(*args): #可变参数,参数组 print('phone',args)send_msm2(110, 113, 333) #参数组不能用word= "haha "这样的形式,直接传def say(word,*args): print(word) prin

函数模板,函数模板重载,可变参数模板,函数模板覆盖,通过引用交换数据

 1.函数模板初级,如果想使用模板,需要实例化,实例化的方式是加上<数据类型> #include <iostream> //函数模板可以对类型进行优化重载,根据类型会覆盖 //如果仍然要使用模板函数,需要实例化 template<class T> T add(T a, T b) { std::cout << "T add " << std::endl; return a + b; } int add(int a, int

(一)Python入门-5函数:06参数类型-位置参数-默认值参数-命名参数-可变参数-强制命名参数

参数的几种类型: 位置参数: 函数调用时,实参默认按位置顺序传递,需要个数和形参匹配.按位置传递的参数,称为: “位置参数” 默认值参数: 我们可以为某些参数设置默认值,这样这些参数在传递时就是可选的.称为“默认值参数”. 默认值参数放到位置参数后面. 命名参数: 我们也可以按照形参的名称传递参数,称为“命名参数”,也称“关键字参数”. 可变参数: 可变参数指的是“可变数量的参数”.分两种情况: 1. *param(一个星号),将多个参数收集到一个“元组”对象中. 2. **param(两个星号

函数-参数(可变参数&amp;关键字)

一个*,会把输入参数打包成一个tuple 两个*,会把输入参数打包成一个字典 1 """ 2 可变参数 3 """ 4 5 6 def add(*args): 7 print(args) 8 9 10 add() # 空元组 11 add(1) # (1,) 12 add(1, 2, 3) # (1, 2, 3) 可变参数求和(开发过程中,如果参数个数不确定的情况下) 调用函数,就是找到def定义的那块内存,想办法往里面传值. 系统只要看到*ar

python3 关键字和可变参数笔记

"""普及一下字典的知识""" # dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}# print(dict.keys())#以列表返回一个字典所有的键# print(str(dict))#输出字典,以可打印的字符串表示.# print(dict["Name"])#返回键对应的值# print(dict.get("Name"))#返回键值# prin

Python学习(八)——可变参数函数

# -*- coding: cp936 -*-  #下面这个函数接受voltage为必选参数,其余三个为可选参数 def parrot(voltage,state='a stiff',action='voom',type='Norwegian Blue'): print("--This parrot wouldn't",action,end=' ') print("if you put",voltage,"volts through it") p

第七章第3讲:python函数的关键字参数、默认参数、(收集参数)

1.关键字参数 作用:函数参数赋值时,不需要考虑函数代码块中参数的位置 def hello1(greeting,name): print("%s %s" % (greeting,name)) def hello2(name,greeting): # print("%s %s" % (name, greeting)) print("%s %s" % (greeting,name)) print(hello1("hello",&q

python学习笔记 可变参数关键字参数**kw相关学习

在Python中可以定义可变参数,顾名思义,可变参数就是传入参数是可变的.可以是任意个,以一个简单的数学编程为例,计算 sum = a * a + b * b + .....z * z 函数定义可以如下: def getsum(num) : sum = 0 for n in num : sum = sum + n * n return sum 但是调用的时候必须定义一个元组或者列表.比如getsum([1,2,3]) 如果利用可变参数调用函数的方式可以变成这样的话就方便的多比如getsum(1,

38 py改变函数参数的值关键字参数和参数默认值函数中可变参数将序列中的元素值作为函数对应的参数值传

第五课:改变函数参数的值 一个python函数可以有任意多个参数,在一个函数的外部来定义变量,然后把变量作为参数传入到函数内,并且在函数的内部来修改函数的参数值,函数结束之后,这些变量的值在如何变化呢? 给函数传递值有2种:1种是值传递,1种是引用传递 # 改变函数参数的值 # 值传递(数值.字符串.布尔 这些都是值传递) 在函数的内部修改变量值,不改变原参数定义的参数值,解释为: 这个在函数中不会改变原来定义(函数外部)的值 这是因为函数里面会有一个占的概念,外边的变量的值会复制给 占 里面,