Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打印(“hello world”,end=';';)会导致语法错误_Python - Fatal编程技术网

Python 打印(“hello world”,end=';';)会导致语法错误

Python 打印(“hello world”,end=';';)会导致语法错误,python,Python,我已经创建了一个我在另一个程序中使用的模块。 模块打印一些文本,休眠一秒钟,然后再打印一些文本(在同一行上,没有空格)。 我正在运行python 2.7,并且from\uuuuuu future\uuuuuu import print\u函数是调用我的模块的程序的第一行,但是当我导入我的模块时,我得到以下错误: Traceback (most recent call last): File "C:\######\document.py", line 3 1, in <module>

我已经创建了一个我在另一个程序中使用的模块。 模块打印一些文本,休眠一秒钟,然后再打印一些文本(在同一行上,没有空格)。 我正在运行python 2.7,并且
from\uuuuuu future\uuuuuu import print\u函数
是调用我的模块的程序的第一行,但是当我导入我的模块时,我得到以下错误:

Traceback (most recent call last):
  File "C:\######\document.py", line 3
1, in <module>
    import mymodule
  File "C:\######\document.py", line 2
    print("hello world", end=' ')
                          ^
SyntaxError: invalid syntax
如何在不导入
print\u函数
两次的情况下修复此问题

我正在运行Python2.7,并在调用我的模块的程序中导入了print_函数

那不行。您必须在此模块中执行future语句,而不是在导入它的脚本或模块中

有关详细信息,请参阅。但简短的版本是:future语句改变了模块的编译方式,因此Python必须能够在模块编译时看到它,而不仅仅是在运行时。(这也是为什么它必须是文件中的第一个非注释/文档字符串行。)


好的,这解释了如何修复它,但它并没有解释为什么会出现问题,除非您已经知道模块编译何时发生

过于简单化了一点:当您导入垃圾邮件时(如果在此会话期间尚未导入垃圾邮件),Python将查找适当的
spam.py
文件。如果它找到一个,那么它会查找比
spam.py
更新的
spam.py
。如果是这样的话,它只是执行它。如果没有,它将
spam.py
编译成
spam.pyc
,然后执行它

因此,因为将来的语句会影响代码的编译方式,如果Python想让将来的语句影响您导入的其他模块,它必须为将来的语句的每个可能组合存储不同版本的
spam.pyc
spam+print_function.pyc
spam+division.pyc
spam+print\u函数+division.pyc
,等等


最后:

如果不导入print_函数两次,如何修复此问题

你真的不能。你可以,但你不想。我所能想到的最干净、最简单的方法是编写一个覆盖查找和编译
.pyc
文件的常用机制的脚本,以确保导入的所有内容都被视为应用了所有未来语句(可能使用上面我半开玩笑地建议的
spam+print_function.pyc
技巧,以确保不会与普通缓存
.pyc
文件发生冲突。(有关让模块继承未来标志或明确指定一组标志的信息,请参阅文档。)


如果这听起来真的很酷,那么学习Python的导入系统是一件非常有趣的事情,但我强烈建议您在升级到至少Python 3.4之后再这样做,因为它已经发生了很大的变化,而且越来越好;学习起来要容易得多(特别是因为整个过程都是用Python编写的,并且有完整的文档记录,而不是散落在三个不同位置的C代码),而且更加灵活(因此您通常不必复制Python通常为您提供的功能的一半,只需替换您想要更改的一部分即可).

在尝试使用之前是否导入了
print\u函数
?Python 2.7不支持将
print
作为函数,除非您从导入函数导入。是的,这是我的程序中的第一次导入上一行发生了什么?请提供一个实际重新创建问题的函数。如果是,它应该可以工作第一次导入。
mymodule
中发生了什么?“在模块编译时”实际上,对于新手来说,解释得足够好吗?我不确定是否清楚,也不确定如何让它更清楚……你的意思是模块编译是在运行后/运行期间?@RyanKrage:模块到字节码的编译通常只在第一次导入时进行一次,之后字节码缓存在
.pyc
文件中。因此显然不是这样够了,让我试着解决这个问题。
def run():
    print("hello world", end =' ')
    time.sleep(0.5)
    print(".", end =' ')
    time.sleep(0.5)
    print(".", end =' ')
    time.sleep(0.5)
    print(".")
    time.sleep(0.25)