2017-01-05 80 views
-2

这里是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

函数*定义中'x.y.z'函数签名有什么意义?当你执行'def func1(a):'时,它定义了一个函数,其中一个参数叫做'a',即前面代码中'a'的值甚至没有被考虑。 – vaultah

+0

@vaultah我认为OP的意思是,为什么当我将导入的东西分配给一个变量并将其用作函数参数时,它的工作是正确的,但是当我直接将它用作函数参数时,我有一个语法错误 – Arman

回答

1

使用def您可以定义接受某些可能未知的(!)参数的新函数。

因此,def sin(x):的意思是“定义一个名为sin的函数接受一个参数”。请注意,这个代码表示x可以绝对什么,功能定义不会(也不能)申请其类型,值,尺寸任何限制等

当你

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

a函数定义为只是一个说法不具有任何关系任何其他a你在代码中使用!你可以称它为x,pi,z或其他任何为这个名字并不重要(代码可读性撇开)。

当您尝试写

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代码荧光笔疯了试图突出上面的代码。

+0

感谢您的解释。现在对我来说很有意义。 – art03