Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3行类似java的代码的替代方案?_Python_Python 2.7 - Fatal编程技术网

Python 3行类似java的代码的替代方案?

Python 3行类似java的代码的替代方案?,python,python-2.7,Python,Python 2.7,假设您有一个函数,它有时返回值,有时不返回值,因为在这种情况下实际上没有什么可以返回的,甚至没有默认值或其他东西。现在,您想对结果做些什么,但当然,只有在有结果的情况下才进行 例如: result = function_call(params) if result: print result 有没有一种方法可以用更通俗的方式写这篇文章,甚至是一行 就像这样: print function_call(params) or #nothing (注意,我的意思是它不应该打印“nothing

假设您有一个函数,它有时返回值,有时不返回值,因为在这种情况下实际上没有什么可以返回的,甚至没有默认值或其他东西。现在,您想对结果做些什么,但当然,只有在有结果的情况下才进行

例如:

result = function_call(params)
if result:
    print result
有没有一种方法可以用更通俗的方式写这篇文章,甚至是一行

就像这样:

print function_call(params) or #nothing

(注意,我的意思是它不应该打印“nothing”或“None”。如果结果是
None
,它实际上应该根本不打印);在Python中,名称绑定是一条语句,因此不能用作语句中的表达式。因为
print
也是一个语句,所以需要3行;在Python 3中,您可以编写:

result = function_call(params)
print(result) if result else None
对于理解或生成器中的名称绑定,情况并非如此,其中名称绑定是具有类似语句语义的语法项:

[print(result) for result in generator_call(params) if result]
正如Kos所说,您可以滥用它来创建一个单元素理解:

[print(result) for result in (function_call(params), ) if result]
另一个执行名称绑定且可能被滥用的语法项是
lambda
表达式:

(lambda result: print(result) if result else None)(function_call(params))

请注意,在这两种情况下,对返回值的操作必须是表达式而不是语句。

否;在Python中,名称绑定是一条语句,因此不能用作语句中的表达式。因为
print
也是一个语句,所以需要3行;在Python 3中,您可以编写:

result = function_call(params)
print(result) if result else None
对于理解或生成器中的名称绑定,情况并非如此,其中名称绑定是具有类似语句语义的语法项:

[print(result) for result in generator_call(params) if result]
正如Kos所说,您可以滥用它来创建一个单元素理解:

[print(result) for result in (function_call(params), ) if result]
另一个执行名称绑定且可能被滥用的语法项是
lambda
表达式:

(lambda result: print(result) if result else None)(function_call(params))

请注意,在这两种情况下,对返回值的操作必须是表达式而不是语句。

我认为更具python风格的版本实际上更接近您的原始版本:

result = function_call(params)
if result is not None:
    do_something(result)

检查
是否(不是)无
对我来说似乎非常惯用-我自己已经使用过好几次,我也在其他地方看到过它的使用[需要引用]。

我认为更具Pythonic风格的版本实际上更接近您的原始版本:

result = function_call(params)
if result is not None:
    do_something(result)

检查
是否(不是)无
对我来说似乎非常惯用-我自己已经使用过好几次,我也在其他地方看到过它的使用[需要引用]。

从答案到现在,我会这样做:

>>> from __future__ import print_function #if Python2.7
>>> def filtered_print(txt):
...    txt and print(txt)
...
>>> filtered_print('hello world')
hello world
>>> filtered_print('None')
None
>>> filtered_print(None)
>>>

如果其他人有更好的解决方案,我仍然愿意选择

从目前的答案来看,我会这样做:

>>> from __future__ import print_function #if Python2.7
>>> def filtered_print(txt):
...    txt and print(txt)
...
>>> filtered_print('hello world')
hello world
>>> filtered_print('None')
None
>>> filtered_print(None)
>>>


如果其他人有更好的解决方案,我仍然愿意选择

我想,一个要求是没有设置?如果设置代码正常,您可以为此创建一个函数。特别容易集成到py3中,其中print本身就是一个函数。这不是3行类似Python的代码吗?我们通常可以用大约1/3行Python代码替换3行Java代码:)是的@gnibbler,
,如果有什么:
行是非常类似Java的代码的一大部分,通常可以用Python编写得更好。@erikb85,一次只移植3行并没有给我们太多机会利用Python的功能。@gnibbler:我不是移植。是的,我只是想提高我技能中的这个小细节。我经常这样做,因此多年来我的python代码逐步改进。:)我想,一个要求是没有设置?如果设置代码正常,您可以为此创建一个函数。特别容易集成到py3中,其中print本身就是一个函数。这不是3行类似Python的代码吗?我们通常可以用大约1/3行Python代码替换3行Java代码:)是的@gnibbler,
,如果有什么:
行是非常类似Java的代码的一大部分,通常可以用Python编写得更好。@erikb85,一次只移植3行并没有给我们太多机会利用Python的功能。@gnibbler:我不是移植。是的,我只是想提高我技能中的这个小细节。我经常这样做,因此多年来我的python代码逐步改进。:)+1.您可以将
作为结果(函数调用(params),
。但这比pythonic重构更像是代码高尔夫。三行版本的可读性明显更高。起初我以为如果result-else-None会打印
None
,但我错了。它真的起作用了@erikb85,这是因为第一部分(
print(result)
)只有在检查条件(
if result
)计算为
True
时才进行计算。否则将计算
None
——这显然会计算为
None
:)+1;您可以将
作为结果(函数调用(params),
。但这比pythonic重构更像是代码高尔夫。三行版本的可读性明显更高。起初我以为如果result-else-None会打印
None
,但我错了。它真的起作用了@erikb85,这是因为第一部分(
print(result)
)只有在检查条件(
if result
)计算为
True
时才进行计算。否则将计算
None
——这显然会计算为
None
:)取决于您是否要执行\u结果是否为空字符串/列表/等等+1因为仅仅是坚持这三行,这在“这里发生了什么”方面非常有表现力,但在“作者想在这里做什么”方面却没有表现力。这是一个完全有效的响应,但不是我个人对python代码的喜好。@erikb85,正如我所提到的,我相信python的标准是在没有可行结果时返回
None
(参见一个示例)。这取决于你是否想做某事\u结果是空字符串/列表/等等+1因为仅仅是坚持这三行,这在“这里发生了什么”方面非常有表现力,但在“作者想在这里做什么”方面却没有表现力。这是一个完全正确的回答,