精华内容
下载资源
问答
  • I'm building a simple interpreter in python and I'm having trouble handling differing numbers of arguments to my functions. My current method is to get a list of the commands/arguments as follows.args...

    I'm building a simple interpreter in python and I'm having trouble handling differing numbers of arguments to my functions. My current method is to get a list of the commands/arguments as follows.

    args = str(raw_input('>> ')).split()

    com = args.pop(0)

    Then to execute com, I check to see if it is in my dictionary of command-> code mappings and if it is I call the function I have stored there. For a command with no arguments, this would look like:

    commands[com]()

    However, if a command had multiple arguments, I would want this:

    commands[com](args[0],args[1])

    Is there some trick where I could pass some (or all) of the elements of my arg list to the function that I'm trying to call? Or is there a better way of implementing this without having to use python's cmd class?

    解决方案

    Try

    commands[com](*args)

    .

    展开全文
  • 自定义函数一直是程序编写过程中必不可少和最重要的内容之一。... Python函数定义非常简单,但灵活度却非常大。除了不需要传参数函数之外,共有必选参数、默认参数、可变参数和关键字参数,也...

    自定义函数一直是程序编写过程中必不可少和最重要的内容之一。定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。       Python的函数定义非常简单,但灵活度却非常大。除了不需要传参数的函数之外,共有必选参数、默认参数、可变参数和关键字参数,也包括几种参数的组合使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。函数定义格式:def 函数名( [参数1,参数2…] ):函数体 (代码)一、无需传参的自定义函数不传递参数的函数是用的比较少的,相当于已经把各种信息都放在了函数内部,无需传参。import randomdef generate_random():for i in range(10):ran = random.randint(1, 20)print(ran, end=' ')generate_random()>>>6 20 18 6 19 2 13 7 11 19二、必选参数的自定义函数

    函数的必选参数,指的是函数调用的时候必须传入的参数,如以下示例中,如果不传入number这个参数,那就会报错TypeError,传入参数之后就会正常输出结果。import randomdef generate_random(number):for i in range(number):ran = random.randint(1, number)print(ran, end=' ')generate_random()>>>TypeError: generate_random() missing 1 required positional argument: 'number'generate_random(8)>>>2 7 8 7 4 8 5 2

    练习:随机生成若干个数字,并求最大值import randomdef max_value(number):ran = []for i in range(number):value = random.randint(1,number)ran.append(value)print(ran)max1 = ran[0]for i in ran:if max1>>[3, 7, 12, 10, 19, 16, 5, 8, 3, 4, 17, 19, 18, 7, 13, 13, 12, 13, 19, 18]19三、可变参数的自定义函数

    顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。要定义出这个函数,我们必须确定输入的参数。由于参数个数不确定,我们首先想到可以把一个list或tuple传进来,但这样太过繁琐。

    定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数。import randomdef add(*args):sum = 0if len(args) > 0:for i in args:sum += iprint('累加的和为:', sum)else:print('没有累加的和:', sum)add()add(1)add(1, 2, 3)>>>没有累加的和: 0累加的和为: 1累加的和为: 6

    当传入两个或多个参数,且既包含可变参数又包含必选参数时,必选参数必须放在可变参数的前面。import randomdef add(name, *args):sum = 0if len(args) > 0:for i in args:sum += iprint('%s累加的和为:%s' % (name, sum))else:print('{}没有累加的和:{}'.format(name, sum))add('李1')add('李2', 1)add('李3', 1, 2, 3)>>>李1没有累加的和:0李2累加的和为:1李3累加的和为:6

    四、默认参数的自定义函数

    默认参数就是在传入的参数中有的值本身是有默认值的,这个时候调用函数的时候可以传入这个参数,用新的值取代它,也可以只传入非默认值,默认参数不传入。

    如以下示例所示,其中b和c都是默认参数def add(a,b=5,c=8):sum = a+b+cprint(sum)add(1) #此时传入的1为a的值>>>14add(1,2) #此时传入的1为a的值,2替换了原本的默认参数>>>11add(1,2,3) #此时传入的1为a的值,2和3分别替换了原本的默认参数>>>6add(1,c=4) #当只想改变第三个参数的默认值而不改变第二个默认值时,就需要加上第三个参数的名字>>>10

    从上面的例子可以看出,默认参数可以简化函数的调用。设置默认参数时,需要注意:

    1、必选参数在前,默认参数在后,否则Python的解释器会报错;2、设置默认参数时,当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

    使用默认参数最大的好处是能降低调用函数的难度,而一旦需要更复杂的调用时,又可以传递更多的参数来实现。五、关键字参数的自定义函数

    可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。def aa(**kwargs):print(kwargs)装包aa(a=1,b='hello',c='tom')>>>{'a': 1, 'b': 'hello', 'c': 'tom'}拆包dict1 = {'a':1,'b':'hello','c':'tom'}aa(**dict1)>>>{'a': 1, 'b': 'hello', 'c': 'tom'}

    示例:a和b都是必要参数,c为可变参数,d为关键字参数def bb(a,b,*c,**d):print(a,b,c,d)a,b两个必要参数传入,可变参数没有传返回空元组,关键字参数也没传返回空字典bb(1,2)>>>12(){}a,b两个必要参数传入,3和4为可变参数的值,因此返回元组,关键字参数也没传返回空字典bb(1,2,3,4)>>>12(3,4){}a,b两个必要参数传入,可变参数没有传返回空元组,x,y为关键字参数返空字典bb(1,2,x=100,y=200)>>>12(){'x':100,'y':200}a,b两个必要参数传入,3为可变参数的值返回元组,x为关键字参数返字典bb(1,2,3,x=100)>>>12(3,){'x':100}

    关键字参数的作用:它可以扩展函数的功能。比如你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。六、命名关键字参数的自定义函数

    对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查。但是调用者仍可以传入不受限制的关键字参数:如果要限制关键字参数的名字,就可以用命名关键字参数。

    和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符,后面的参数被视为命名关键字参数。

    示例:

    以下示例表明,原本对于关键字参数,输入是没有限制的,但是下面使用了命名关键字参数,以'*'号标记来分隔,限制了关键字必须为height和city两个,输入其他的均会报错。def actor_lady(name, age, *, height, city):print(name, age, height, city)actor_lady('白冰', 28, 168, '南京')>>>TypeError:actor_lady()takes2positionalargumentsbut4weregivenactor_lady('白冰', 28, height=168, hometown='南京')>>>TypeError:actor_lady()gotanunexpectedkeywordargument'hometown'actor_lady('白冰', 28, height=168, city='南京')>>> 白冰 28 168 南京

    总结:

    1、在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用,除了可变参数无法和命名关键字参数混合。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数/命名关键字参数和关键字参数。

    2、*args是可变参数,args接收的是一个tuple;**kwargs是关键字参数,kwargs接收的是一个dict。

    3、命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。定义命名的关键字参数不要忘了写分隔符 '* ',否则定义的将是必选参数。

    展开全文
  • Is there an easy way to be inside a python function and get a list of the parameter names?For example:def func(a,b,c):print magic_that_does_what_I_want()>>> func()['a','b','c']Thanks解决方案...

    Is there an easy way to be inside a python function and get a list of the parameter names?

    For example:

    def func(a,b,c):

    print magic_that_does_what_I_want()

    >>> func()

    ['a','b','c']

    Thanks

    解决方案

    Well we don't actually need inspect here.

    >>> func = lambda x, y: (x, y)

    >>>

    >>> func.__code__.co_argcount

    2

    >>> func.__code__.co_varnames

    ('x', 'y')

    >>>

    >>> def func2(x,y=3):

    ... print(func2.__code__.co_varnames)

    ... pass # Other things

    ...

    >>> func2(3,3)

    ('x', 'y')

    >>>

    >>> func2.__defaults__

    (3,)

    For Python 2.5 and older, use func_code instead of __code__, and func_defaults instead of __defaults__.

    展开全文
  • for f, arg in FUNCTION_LIST: f(arg) 循环中的第三轮,它尝试将一个空的参数元组传递给一个不接受任何参数函数.它给出了错误TypeError:f2()不带参数(给定1).前两个函数调用正常工作 – 元组的内容被传递,而不是...

    def f1(n): #accepts one argument

    pass

    def f2(): #accepts no arguments

    pass

    FUNCTION_LIST = [(f1,(2)), #each list entry is a tuple containing a function object and a tuple of arguments

    (f1,(6)),

    (f2,())]

    for f, arg in FUNCTION_LIST:

    f(arg)

    循环中的第三轮,它尝试将一个空的参数元组传递给一个不接受任何参数的函数.它给出了错误TypeError:f2()不带参数(给定1).前两个函数调用正常工作 – 元组的内容被传递,而不是元组本身.

    摆脱违规列表条目中的空元组参数并不能解决问题:

    FUNCTION_LIST[2] = (f2,)

    for f,arg in FUNCTION_LIST:

    f(arg)

    导致ValueError:需要多于1个值来解压缩.

    我也试过迭代索引而不是列表元素.

    for n in range(len(FUNCTION_LIST)):

    FUNCTION_LIST[n][0](FUNCTION_LIST[n][1])

    这在第一种情况下给出相同的TypeError,并且当列表的第三个条目是(f2,)时,IndexError:tuple索引超出范围.

    最后,星号表示法也不起作用.这次调用f1时出错:

    for f,args in FUNCTION_LIST:

    f(*args)

    在*之后给出TypeError:f1()参数必须是一个序列,而不是int.

    我已经没事了.我仍然认为第一个应该工作.谁能指出我正确的方向?

    展开全文
  • Python函数的非固定参数

    千次阅读 2021-02-10 00:19:15
    当我们调用函数时,默认参数是非必须传递的。默认参数用途:安装默认软件(def test(x,soft=True))传递一下默认的值(定义mysql的默认端口号:def count(host,port=3306))三、参数组之前我们传参数,都是传...
  • Python函数参数注释

    2021-01-13 05:36:21
    函数定义的弊端:python是动态语言,变量随时可以被赋值,且能赋值为不同的类型,动态语言很灵活,但是这种特性也是弊端难发现:由于不任何类型检查,直到运行期问题才显现出来,或者线上运行时才能暴露出问 题难...
  • import inspect print(inspect.getfullargspec(Getwhatcms.apply_async))
  • python函数可以没有参数

    千次阅读 2021-01-12 06:45:49
    python怎么查看函数有什么参数Python参数为None是什么意思python 为什么默认参数不能放在必选参数前面python怎么向类中的函数传递参数我再补充一下:直接写个例子,看注释就能明白 class Person: #有时写作Person...
  • symbols()函数正如其他答案所指出的那样 – 在符号中使用** args是为了传递关于正在创建的符号的假设.您可以传递的假设列表在Assumptions页面下记录为supported predicates.但是,您还应该注意,可以传入一些其他特殊...
  • 我一直很难理解h(a)(b)的意思。在昨天之前,我从未见过这样的函数,而且我不能这样声明函数:...具有多个参数括号的函数不存在,正如您在试图定义参数括号时看到的那样。但是,有一些函数返回(其他)函数:def func(...
  • python函数参数定义的四种方式:1. F(arg1,arg2,…)最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的函数在调用时,必须在函数名后的小括号里提供个数相等的值(实际参数),...
  • python plot函数参数

    2021-04-26 17:50:56
    python中plot怎么设置横纵坐标名称用plot画二维图像时,默认情况下的横坐标和纵坐标显示的值有时达不到自己的需CSS布局HTML小编今天和大家分享,需要借助xticks()和yticks()分别对横坐标x-axis和纵坐标y-axis进行...
  • 一、函数的基本参数1.位置参数调用执行时,传递的实参按照位置顺序给形参进行赋值def test1(p1,p2,p3):print(p1,p2,p3)test1(10,20,30)2.默认值参数定义参数是,可以给参数赋值;如果函数参数中出现了默认值参数~...
  • 带可选参数Python函数

    千次阅读 2021-01-13 04:41:00
    我试图改进Python中的函数。它需要几个参数,其中一些可能会丢失。def some_function (self, a, b, c, d = None, e = None, f = None, g = None, h = None):#code参数d到h是字符串类型,并且具有不同的含义 – 重要...
  • Python——函数参数,, 定义函数的时候,定义函数的时候,我们将函数参数名字和位置确定下来,函数的接口定义就完成了,在使用参数时,除了必选参数外,我们还可以使用默认参数、可变参数和关键字参数,是函数...
  • python函数中使用多个参数

    千次阅读 2021-01-29 11:26:25
    我想解决的问题是:定义一个名为food的函数,它接收两个参数:一个表示一天中从0到24小时的时间的整数值和一个表示一个人是否喜欢甜食的布尔值(True)和False(False)。该函数应返回一个字符串,其中包含以下消息。在...
  • python中实现函数不定长函数参数列表一般采用星号*,而星号又有两种方式: 单星号*一般在不指定参数时使用,而参数会以元祖tuple的形式传入,且各个参数会维持原有参数类型 双星号**一般用于全部以指定参数传入的...
  • 函数类型必须参数函数调用时必须要传的参数,必须以正确的顺序传入,调用的时候必须和声明的时候保持一致def f(name, age):print('I am %s , I am %d years old'%(name, age))f(18, 'eric')关键字参数函数调用时,...
  • 本文实例讲述了Python函数的定义方式与函数参数问题。分享给大家供大家参考,具体如下:涉及内容:函数的定义方式函数的文字描述空操作语句位置参数默认参数关键参数可变长度参数函数的定义方式:函数的文字说明:...
  • 不可变对象:Number, String, Tuple, bool 可变对象:List, Set, Dict 是可以改变内部的元素 实例1(str类型): ...print "这是函数外边 , 值为:",mystr 输出结果: 这是function中 , 值为: inside 这是函.
  • Possible Duplicate:“Least Astonishment” in Python: The Mutable Default Argument我对可选参数Python函数/方法中的工作方式有点困惑。我有以下代码块:>>> def F(a, b=[]):... b.append(a)... ...
  • 关于python中修改函数参数的问题?

    千次阅读 2021-02-03 15:35:53
    参数的传递本质上就是python赋值的另一个实例而已。那么,这个问题分为可变对象和不可变对象两种情况进行讨论:在原处改变函数的可变对象参数的值会对调用者有影响。函数能够就地改变传入的可变对象,因此其结果会...
  • 函数参数有形参和实参之分,定义函数时函数头包含的参数是形参,函数调用时所使用的实际参数称为实参,函数调用的过程就是实参传递给形参的过程,python函数参数调用方法采用"传对象引用"的方式, 如参数为不可变...
  • Lay = [7,12,2] net = Net(*Lay) 解决问题!!! 参考了这个链接:python列表中的元素作为参数传入函数
  • 默认参数# 函数参数支持默认。当某个参数没有传递实际值时,函数将使用默认参数计算。例如,可以向login()函数的username参数和password参数分别提供一个默认值。# 函数定义def login(username="maxxianglin",...
  • 我试图找出一种方法,使这个函数返回一个2D列表,其中包含n组的k大小的所有子集。n>=k该函数接受2个数字,n,k,因此n>=k。并返回组{1,2,…,n-1}中k大小的所有子集的可能性。在例如,如果参数是:...
  • 1、在python自定义函数中,如果需要传入的实际参数有多个,我们在定义形式参数的时候,可以有两种形式,一是*parameter,二是**parameter。这两种分别提供了传入的参数是多个的形式。 *parameter。这种形式表示接收...
  • Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑.入坑挖坑def f(x,li=[]):for i in range(x):li.append(i*i)print(li)print('---1---')f(4)print('---2---')f(5)预期结果---1---[0, ...
  • 文章目录前言一、定义函数1....Python提供了许多内建函数,比如print()。我们也可以创建函数,即用户自定义函数。 一、定义函数 函数的使用必须遵循“先定义,后调用”的原则。函数的定义就相..
  • python函数的默认参数请勿定义可变类型经常会看到这样一句代码警告:Default argument value is mutable意思是告诉我们函数的定义中,使用可变类型默认参数。那为什么会有这个警告呢?可变类型和不可变类型可变...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 324,988
精华内容 129,995
关键字:

python函数列表做参数

python 订阅