除了乘法和取幂之外,星号在Python中的作用是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了除了乘法和取幂之外,星号在Python中的作用是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1783字,纯文字阅读大概需要3分钟。
内容图文
![除了乘法和取幂之外,星号在Python中的作用是什么?](/upload/InfoBanner/zyjiaocheng/763/1806fce0b79343d88fb3a08abd98dcf8.jpg)
参见英文答案 > asterisk in function call 3个
> proper name for python * operator? 7个
在Peter Norvig用Python编写的Lisp解释器(http://norvig.com/lispy.html)中,他将Lisp的eval定义如下:
def eval(x, env=global_env):
"Evaluate an expression in an environment."
if isa(x, Symbol): # variable reference
return env.find(x)[x]
elif not isa(x, list): # constant literal
return x
elif x[0] == 'quote': # (quote exp)
(_, exp) = x
return exp
elif x[0] == 'if': # (if test conseq alt)
(_, test, conseq, alt) = x
return eval((conseq if eval(test, env) else alt), env)
elif x[0] == 'set!': # (set! var exp)
(_, var, exp) = x
env.find(var)[var] = eval(exp, env)
elif x[0] == 'define': # (define var exp)
(_, var, exp) = x
env[var] = eval(exp, env)
elif x[0] == 'lambda': # (lambda (var*) exp)
(_, vars, exp) = x
return lambda *args: eval(exp, Env(vars, args, env))
elif x[0] == 'begin': # (begin exp*)
for exp in x[1:]:
val = eval(exp, env)
return val
else: # (proc exp*)
exps = [eval(exp, env) for exp in x]
proc = exps.pop(0)
return proc(*exps)
isa = isinstance
Symbol = str
这条线特别让我感兴趣:
return proc(*exps)
exps中的星号究竟是做什么的?
解决方法:
在seqable对象解包之前单个星号,就像Joran所示:
In [1]: def f(*args): return args
In [2]: f(1,2,3)
Out[2]: (1, 2, 3)
In [3]: f(*[1,2,3,4])
Out[3]: (1, 2, 3, 4)
(注意*的第三个应用程序:在函数定义中,星号表示可变长度的参数列表,所有这些都被打包到一个列表中,args,在In [1]中)
另外值得注意的是,双星号(**)会对字典进行解包:
In [5]: def g(foo=None, bar=42): return foo,bar
In [6]: g()
Out[6]: (None, 42)
In [7]: g(*[1,2])
Out[7]: (1, 2)
In [8]: g(**{'foo': 'FOO', 'bar': 'BAR'})
Out[8]: ('FOO', 'BAR')
内容总结
以上是互联网集市为您收集整理的除了乘法和取幂之外,星号在Python中的作用是什么?全部内容,希望文章能够帮你解决除了乘法和取幂之外,星号在Python中的作用是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。