【问题标题】:Scalar Variables from Perl to Python?从 Perl 到 Python 的标量变量?
【发布时间】:2020-08-08 14:27:34
【问题描述】:

我正在将程序从 perl 翻译成 python,但我真的不知道如何将标量变量翻译成 python。我的问题是我想根据代码中使用的所有标量变量调用传入的第一个值,当提到它时,标量变量指的是分配给它的值。

具体区域是

my $min = $_[0];
my $max = $_[1];

所以这两个变量事先被分配了一个值,现在我要做的是调用我的最小值并让它成为第一个出现的值,然后我希望我的最大值被调用为第二个出现的值. 基本上,试图收集生成到最小值和最大值的信息,现在把它带到这里。不明白如何在python中做到这一点。


问题是我有 3-5 个不同的值分配给最小值和最大值,我不知道如何引入值。

我是提出问题的人,但我以我认为是临时用户的身份登录并被删除。谢谢!

【问题讨论】:

  • 你能解释一下“打电话给我的分钟”是什么意思吗?通常“调用”一词是指调用子程序或函数;谈论“调用”一个值没有多大意义。请注意$_[0]$_[1]@_ 的(前两个)元素,@_ 是保存函数参数的数组变量。在 Python 中,您只需声明参数。
  • @mit - 你可以去你的 Programmers 帐户:programmers.stackexchange.com/users/34534/mit 并注册帐户。将它与堆栈溢出相关联。这样我们就可以将您的 SO 帐户与此问题结合起来。谢谢。

标签: python perl variables


【解决方案1】:

我不确定您要的是什么,但仅供参考 Python 不会将类型附加到脚本中的名称。类型是名称所指的对象。所以没有“标量”变量或“列表上下文”之类的区别。

所以看起来你有一个列表。你可以这样做:

mymin = mylist[0]
mymax = mylist[1]

假设mylist 持有对列表对象的引用(在 Python 中,每个名称都是引用)。

【讨论】:

  • 或者你可以称它们为“min”和“max”而不是“mymin”和“mymax”。
  • @compman 在 Python 中不鼓励使用这些名称,因为它们与全局函数 minmax 相同,并且会屏蔽它们。
  • 这就是 Perl 在它的变量前面使用符号的原因,这样你就不用担心不小心掩盖了一些内置的全局变量。
【解决方案2】:

是的,我确定您说的是子例程 args!在 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 在函数方面有很多可能性 - 位置和关键字参数等等。

【讨论】:

  • 在你的第一个代码 sn-p 中,我只写 def func(min, max):。它在功能上是等效的,但在风格上更好,因为参数有更多的描述性名称,而且你不使用不必要的局部变量。
  • 是的,你是对的。即使我会那样做.感谢您的评论:)
【解决方案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

【讨论】:

    猜你喜欢
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多