python传递多个参数时各参数由什么分隔,在python中传递多个不同的函数参数

首先,我已经看到了许多类似的问题,尽管它们并不完全是我的问题。我已经熟悉了args和kwargs。

问题说明:

我通常在调用函数时使用位置参数。然而,我经常发现自己需要将大量的参数传递到一个函数中,因此使用位置参数变得相当麻烦。我还发现自己需要将不同数量的变量传递给一个函数,如果需要,这个函数可以接受更多或其他变量。

如何将多个参数传递给能够接受多个参数的函数?

我试图创建一个尽可能基本的例子。函数只是对一些变量执行一些算术运算,然后将它们打印出来。

a = 10

b = 20

c = 30

def firstFunction(*args):

d = a *2

e = b /2

f = c +2

x = d -10

y = e -10

z = f -10

h = 1 #or 2

secondFunction(d,e,f,h)

thirdFunction(x,y,z,h)

def secondFunction(d,e,f,h):

if h == 1:

print d

print e

print f

def thirdFunction(x,y,z,h):

if h == 2:

print x

print y

print z

firstFunction(b,c,a)

如预期,h=1和h=2的结果分别为:

20

10

32

10

0

22

现在假设我想把第二个和第三个函数组合在一起,所以我只需要调用一个函数而不是两个。在这种情况下,函数是:

def combinedFunction(d,e,f,h,x,y,z):

if h == 1:

print d

print e

print f

if h == 2:

print x

print y

print z

它的名字是:combinedFunction(d,e,f,h,x,y,z)。正如您所能想象的,对于更复杂的函数来说,这可能会变得非常烦人。另外,我传递了许多不同的论点,它们根本不会被使用,而且每一个都必须首先声明。例如,在示例中,如果h = 1、x、y和z必须传递到函数中,可能其中一个函数的值尚未确定(在这种简单的情况下是这样)。我不能使用"combinedfunction(*args)",因为并非每个参数都是全局定义的。

TLDR:

基本上我想要以下内容:

def someFunction(accepts any number of arguments **and** in any order):

# does some stuff using those arguments it received at the time it was called

# it can accept many more parameters if needed

# it won't need to do stuff to a variable that hasn't been passed through

此函数的调用方式为:

someFunction(sends any number of arguments **and** in any order)

# can call the function again using different arguments and a

# different number of arguments if needed

这很容易实现吗?

你能解释一下为什么def someFunction(**kwargs)不能解决这个问题吗?

我经常发现自己需要将大量的参数传递到一个函数中——这是一种代码味道;我传递了许多不同的参数,这些参数根本不会被使用——那么,为什么要传递它们呢?我认为你应该重新考虑一下你的设计。

@EugenePrimako和def someFunction(**kwargs)的观点,难道所有的论据都不需要是全球性的吗?在这个例子中,在firstFunction中,我创建了新的变量,在这个函数中,我调用了一个额外的函数,如combinedFunction。如果我按照示例中当前的方式传递变量,它将起作用,但是如果我使用kwargs(或args),那么需要全局定义变量,以便它起作用。我当然可能弄错了,但我试过的时候没用。

@mkrieger1,"我传递了很多不同的参数,这些参数根本不会被使用"这句话指的是combinedFunction(d,e,f,h,x,y,z)的用法,如果调用它,那么在"h=1"的情况下,"x、y和z仍然必须传递到函数中"。我是说我不想发生这种事。

从函数内部使用全局变量通常是一种糟糕的方法。您可以使用**kwargs代替它,方法如下:

def firstFunction(**kwargs):

d = kwargs.get('a') * 2

secondFunction(d=d, **kwargs)

thirdFunction(e=1, **kwargs)

def secondFunction(d, **kwargs):

print d

print kwargs.get('a')

def thirdFunction(**kwargs):

print kwargs.get('e')

firstFunction(a=1, b=3, q=42)  # q will not be used

谢谢您!我不知道kwargs.get()。它仍然有点凌乱,但它做了我想做的。

澄清-kwargs是一个常见的dict,因此您可以使用kwargs.get('a')、kwargs['a']和所有其他dict操作。

您可以使用dict将数据传递给函数,但它确实使编程时的直观性降低了。每个函数都可以根据需要转换dict参数。

def func_a(input_dict):

a = input_dict["a"]

b = input_dict["b"]

print(a+b)

def func_b(input_dict):

c = input_dict["c"]

d = input_dict["d"]

print(c+d)

def combined_func(input_dict):

func_a(input_dict)

func_b(input_dict)

这和Kwargs非常相似,所以它可能不是你想要的。

如果我正确理解了你在寻找什么:

def something(*args):

for i in args:

print(i)

some_args = range(10)

something(*some_args)

print('-----------')

something(*some_args[::-1]) # reverse order

输出:

0

1

2

3

4

5

6

7

8

9

-----------

9

8

7

6

5

4

3

2

1

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值