Python内置类型作为函数参数

时间:2014-02-06 03:31:43

标签: python

我决定在coderbyte.com做一些编码练习,然后在第一个练习中(反向一个字符串)我发现了这个:

def FirstReverse(str): 

尽管它有效,但我认为使用内置类型名称作为参数并不是一个好主意。你怎么看? 我知道这有点傻,但这是我在stackoverflow的第一个问题!谢谢=)

4 个答案:

答案 0 :(得分:1)

在该功能定义中,str应该是string,而不是built-in function str()。执行此操作时,您将覆盖内置函数,因此将无法在函数str()内调用f ,但您仍然可以使用它外。这是因为范围界定,您将在f的本地范围内覆盖它:

def f(str):
    print str(123) # will raise an error, because 'str' is not callable (i.e. a function) anymore

f("some string here")

print str(123) # OK

这是一个非常常见的错误,你越早学会避免它,你就越早成为一名优秀的程序员。

答案 1 :(得分:0)

可以使用除“关键字”之外的“任何东西”作为变量/参数名称。

这通常不是一个好主意 - 实际上从来都不是。


也许这个例子来自Python1系列,其中有一个字符串模块,但没有str类型。

答案 2 :(得分:0)

我不是那个投票支持克里斯蒂安答案的人,但如果它有所帮助,这里有一个详细说明:

工作职能

def f(string):
    print ("In function.")
    print (string)
    print (type(string))
    real_string = str(string)
    print (type(real_string))

print ("In main.")
int_val = 123
print (type(int_val))
f(int_val)

结果

主要。
在功能上。
123个
class'int' class'str'

破碎功能

def f(str):
    print ("In function.")
    print (str)
    print (type(str))
    real_string = str(str)
    print (type(real_string))

print ("In main.")
int_val = 123
print (type(int_val))
f(int_val)

结果

----> 5 real_string = str(str)
  TypeError:'int'对象不可调用

答案 3 :(得分:0)

使用listdictstr作为变量名是一个常见的新错误'。

我认为这对于教程来说不是一个好习惯,但在实践中可以正常运行在此示例中。如果代码是用这个参数名称呈现给我的话,我会皱眉。

要探索的更有趣的事情是,为什么内置的str函数不会出现此问题。

查找

>>> str(123)        # the built-in prior to the function 'f' declared
'123'
>>> def f(str):     # Note 'str' as parameter
...    return str[::-1]
... 
>>> f('123')        # function works...
'321'
>>> f(str(123))     # function 'f' works with the function 'str' prior
'321'
>>> str(123)        # built-in 'str' still works...
'123'

答案是f str参数仅在str内部覆盖内置f函数。在str的范围完成后,它会“恢复”到内置f

注意:

>>> def f(str):
...    return str('123')[::-1]
... 
>>> f(123)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
TypeError: 'int' object is not callable

由于您在int内调用f,因此您指的是参数,而不是函数。它变得令人困惑,因此,使用内置的名称作为变量,参数等无论是本地还是全局都不是一个好主意。

相关问题