如何将Perl的标量变量转换为Python?
我正在把一个程序从perl语言转换成python,但我不知道怎么把标量变量转换成python。我的问题是,我想根据代码中使用的所有标量变量来调用第一个出现的值。提到标量变量时,它指的是分配给它的值。
具体的地方是
my $min = $_[0];
my $max = $_[1];
所以这两个变量在之前已经被赋值了,现在我想做的是调用我的最小值,让它成为第一个出现的值,然后我想让我的最大值成为第二个出现的值。基本上,我是想把生成的最小值和最大值的信息带到这里来。我不知道在python中怎么做到这一点。
问题是,我有3到5个不同的值被赋给最小值和最大值,但我不知道怎么把这些值引入进来。
我是提问的人,但我以为是临时用户登录,所以问题被删除了。谢谢!
3 个回答
我觉得你在说的是子程序的参数。在perl和python的函数调用之间有一个很大的区别(在python中,它们更像是方法..),就是python可以把不同的东西作为一个参数传递,这是一种常规操作,而perl虽然也能这样做,但很少见。所以在python中调用一个“函数”时,你需要注意这个参数是什么。它是一个“数组”(列表、字典或元组),还是一个标量变量,或者是字符串,或者是字节。如果是字符串或字节,python 3.x引入了很多严格的类型和语法检查,这一开始可能会让人很头疼;而perl在字符串和字节之间转换比较容易,python就不行(因为python想要强制使用unicode字符串的数据类型)。
简单来说,你只需要引用名字(不像perl那样用$name),然后手动跟踪这个参数的类型:
arg1 = 50
arg2 = 70
myPythonFunc(arg1, arg2)
....
def myPythonFunc(arg1, arg2):
if (arg1 > arg2):
return arg2
...
如果你真的打算使用数组(不过使用单独的参数有更多优点,比如默认值和命名参数等),那么:
args = [ 50, 70 ]
myPythonFunc(args)
....
def myPythonFunc(args):
if (args[0] > args[1]):
return args[1]
...
可以看看这个链接: http://diveintopython.net/native_data_types/lists.html
是的,我确定你在说的是子程序参数!在Python中,你不会像在Perl那样把参数放在一个叫'@_'的列表里。相反,最简单的做法是:
def func(arg1, arg2):
min = arg1
max = arg2
#do your stuff
这大致相当于:
sub func{
my($min, $max) = @_;
#your stuff
}
如果你一定要把参数作为一个列表或元组(这两者都是集合)来接收,可以这样做:
def func(args):
min, max = args[0], args[1]
#your stuff
你可以把`args`换成你喜欢的任何名字,只要遵循Python的变量命名规则就行。
我建议你看看之前回答中提到的书,特别是关于函数的部分,因为Python在函数方面有很多可能性,比如位置参数和关键字参数等等。
我不太确定你在问什么,不过顺便说一下,Python 并不会把类型和脚本中的名字绑定在一起。类型是指这个名字所指向的对象。所以没有什么“标量”变量或者“列表上下文”之类的区别。
看起来你有一个列表。你可以这样做:
mymin = mylist[0]
mymax = mylist[1]
假设 mylist
是指向一个列表对象的引用(在 Python 中,每个名字都是一个引用)。