python导入模块点表示法作为函数参数输入

时间:2017-01-05 15:18:22

标签: python

这里是python编程的新手。我需要一些帮助来理解为什么这不起作用:

import x.y # x is a package with __init__.py
def func1(x.y.z): # I get a syntax error here

当我这样做时它起作用:

import x.y
a = x.y.z
def func1(a):

我已经在网上搜索,无法找到任何可以直接回复此问题的内容。

感谢。

1 个答案:

答案 0 :(得分:1)

使用def定义新函数,这些函数接受一些可能未知的(!)参数。

因此,def sin(x):表示“定义一个名为sin的函数,它接受一个参数”。请注意,此代码表示x可以绝对是,函数定义不会(也不能)对其类型,值,大小应用任何限制等等。

当你这样做时

a = "hello"
def test(a):
    pass

函数定义中的a 仅仅是一个参数,它与您在其中使用的任何其他a没有任何关系码!您可以将其称为xpiz或其他任何名称无关紧要(代码可读性除外)。

当你尝试写

def test(x.y.z):
    pass

您会收到语法错误,因为存在对变量'和参数'名称的限制,这些限制不允许您根据需要调用变量。为什么?只是因为否则你会得到很多不确定性。例如,如何解析这个:

# a poorly formatted number literal or a variable definition??
1234hello = "test" 

# attempt to access a member of a class (or module) or a variable definition??
x.y.z = 5

# is "yay a variable's name or a poorly formatted string literal??
x = "yay - 5 

# the same question as above
f' = df/dx

函数参数是一个变量,因此对它也施加了相同的限制。

顺便说一句,看看SO代码荧光笔疯狂试图突出上面的代码。