Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 有没有一种方法可以立即使用一个或多个返回值?_Python_Python 3.x - Fatal编程技术网

Python 有没有一种方法可以立即使用一个或多个返回值?

Python 有没有一种方法可以立即使用一个或多个返回值?,python,python-3.x,Python,Python 3.x,我把一个字符串分成两个,我知道第二个是整数的表示。我想解包这两个值,并立即将第二个值转换为int。基本上,我希望这段代码在一行中: a, b = x.split('foo') b = int(b) 我在SO中搜索了web,但查找的内容包含python多返回值只返回解释如何一次返回多个值的站点。然后我想到: a, b = [value if i == 0 else int(value) for i, value in enumerate(f())] 但这是我想避免的讨厌的事情 那么,有没有一种

我把一个字符串分成两个,我知道第二个是整数的表示。我想解包这两个值,并立即将第二个值转换为int。基本上,我希望这段代码在一行中:

a, b = x.split('foo')
b = int(b)
我在SO中搜索了web,但查找的内容包含
python多返回值
只返回解释如何一次返回多个值的站点。然后我想到:

a, b = [value if i == 0 else int(value) for i, value in enumerate(f())]
但这是我想避免的讨厌的事情


那么,有没有一种方法可以实时转换函数的多个返回值之一?

您可以按如下方式使用映射函数:

my_str = 'item 1'
a, b = map(lambda x : int(x) if x.isdigit() else x, my_str.split())

您可以按如下方式使用映射功能:

my_str = 'item 1'
a, b = map(lambda x : int(x) if x.isdigit() else x, my_str.split())

在Python 3.8的赋值表达式中,您可以使用以下讨厌的表达式:

x = '4foobar'
a, b = int((y := x.split('foo'))[0]), y[1]
# a = 4, b = 'bar'

虽然这显然是复杂的,而且容易出错。只需使用两行程序。

对于Python 3.8的赋值表达式,您可以使用以下讨厌的语句:

x = '4foobar'
a, b = int((y := x.split('foo'))[0]), y[1]
# a = 4, b = 'bar'

虽然这显然是复杂的,而且容易出错。只需使用两行程序。

还有一个列表理解选项:

x = 'test 1'

a, b = [(a, int(b)) for a, b in [x.split()]][0]

print(type(a), a, type(b), b)
# output: <class 'str'> test <class 'int'> 1
x='test1'
a、 b=[(a,int(b))表示[x.split()][0]中的a,b
打印(a型、a型、b型、b型)
#输出:测试1

还有一个列表理解选项:

x = 'test 1'

a, b = [(a, int(b)) for a, b in [x.split()]][0]

print(type(a), a, type(b), b)
# output: <class 'str'> test <class 'int'> 1
x='test1'
a、 b=[(a,int(b))表示[x.split()][0]中的a,b
打印(a型、a型、b型、b型)
#输出:测试1

如果您希望使用简短的一行程序使代码可读、紧凑、整洁,那么定义自己的函数是一个不错的选择。函数的定义可能会在其他地方占用空间(甚至在模块中),而主脚本保持整洁

def str_int(我的字符串):
a、 b=我的字符串.split()
b=int(b)
返回a,b
那么对该函数的调用是一个简短的单行程序。

a,b=str\u int(my\u string)

如果您想要一个简短的单行程序使代码可读、紧凑、整洁,那么定义自己的函数是一个不错的选择。函数的定义可能会在其他地方占用空间(甚至在模块中),而主脚本保持整洁

def str_int(我的字符串):
a、 b=我的字符串.split()
b=int(b)
返回a,b
那么对该函数的调用是一个简短的单行程序。

a,b=str\u int(我的字符串)

我认为您试图避免的第一段代码是您将得到的最简洁的代码。它简洁明了。事实上,它超过两行并不是一个问题。
a,b=x.split('foo');b=int(b)
…这和任何其他解决方案一样短…
a,b=x.split('foo')[0],int(x.split('foo')[1])
。顺便说一句,单行程序不一定“更好”。
我希望这段代码在一行中
-为什么?如果您绝对需要这段代码是一个紧凑的单行程序,为什么不定义一个函数来进行拆分和转换为int并返回片段?这个定义将在其他地方占据一席之地,您可以使用一行代码
a,b=func('foo')
我认为您试图避免的第一段代码是您将要得到的最简洁的代码。它简洁明了。事实上,它超过两行并不是一个问题。
a,b=x.split('foo');b=int(b)
…这和任何其他解决方案一样短…
a,b=x.split('foo')[0],int(x.split('foo')[1])
。顺便说一句,单行程序不一定“更好”。
我希望这段代码在一行中
-为什么?如果您绝对需要这段代码是一个紧凑的单行程序,为什么不定义一个函数来进行拆分和转换为int并返回片段?该定义将在其他地方占据空间,您可以使用一行代码
a,b=func('foo')
这非常好。可理解、可扩展且在不同输入上更通用。通过删除映射和lambda,并在列表理解中使用相同的结构,可以提高可读性
a,b=[int(x)if x.isdigit()else x for x in my_str.split()]
这非常好。可理解、可扩展且在不同输入上更通用。通过删除映射和lambda,并在列表理解中使用相同的结构,可以提高可读性
a,b=[int(x)if x.isdigit()else x for x in my_str.split()]