在许多情况下(例如函数参数),Pydev不会静态地知道变量的类型.因此,代码完成(在.使用之后或使用时ctrl+space)不起作用.
在大多数情况下,您在设计软件时知道运行时的类型.有没有办法暗示Pydev正确编码完成它?
我想这可能需要特定的Pydev功能,或者甚至是新的Python PIP.
这实际上似乎是所有动态语言的一般问题......
更新:
也许有一个例子可以澄清:
def some_func(a_list, an_object):
a_list.app # Here I would not get code completion for append
Run Code Online (Sandbox Code Playgroud)
如果Pydev(或PIP)支持它,可以使用的示例:
from someobj import SomeObject
def some_func(a_list, an_object):
# typecast: a_list=list
# typecast: an_object=SomeObject
a_list.app # Now code completion would show append
Run Code Online (Sandbox Code Playgroud)
我不支持这种特定的方法 - 它只是一个可以工作的系统的例子.同样,当然这不应该是强制性的 - 但有时缺乏提示类型的可能性是令人讨厌的.
我正在研究为pyo编译相当多的python模块和包.我知道这可以通过设置PYTHONOPTIMIZE环境变量或在启动时指定-O来实现.我想强制执行pyo而不是pyc来产生最小的足迹.为了在我的部署模块中执行此操作,我必须创建一个使用-O选项启动实际脚本的包装器脚本,因为需要在启动解释器之前指定环境变量.
有没有办法绕过这个并以编程方式强制执行pyo创建?
亲切的问候,托尔斯滕
有时我想用一个用于启动父进程的相同优化标志来生成子进程.
我可以使用类似的东西:
optimize = not __debug__
但这样我就匹配了两个-O和-OO旗帜.
是否有一些包含该信息的python内部状态?
我与主管一起运行 python 任务,当我尝试在 python 任务中使用 mutilprocess 时,我遇到了错误
"File/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 124, in start
'daemonic processes are not allowed to have children'"
Run Code Online (Sandbox Code Playgroud)
但是当我在终端中执行命令后就可以了。"export PYTHONOPTIMIZE=1"任何人都可以告诉我执行命令时发生了什么"export PYTHONOPTIMIZE=1"
我正在咨询Python 3.6的官方Python语法规范.
我无法找到任何注释语法(它们显示在a前面#)和文档字符串(它们应该出现''').快速查看词法分析页面也没有帮助 - 文档字符串在那里被定义,longstrings但没有出现在语法规范中.名称的类型会STRING进一步显示,但不会引用其定义.
鉴于此,我很好奇CPython编译器如何知道注释和文档字符串是什么.这项壮举是如何完成的?
我最初猜测,CPython编译器在第一次传递中删除了注释和文档字符串,但随后又乞求了如何help()呈现相关文档字符串的问题.
我真的很困惑Python中的函数调用速度.第一和第二种情况,没有任何意外:
%timeit reduce(lambda res, x: res+x, range(1000))
Run Code Online (Sandbox Code Playgroud)
10000循环,最佳3:每循环150μs
def my_add(res, x):
return res + x
%timeit reduce(my_add, range(1000))
Run Code Online (Sandbox Code Playgroud)
10000循环,最佳3:每循环148μs
但第三种情况对我来说很奇怪:
from operator import add
%timeit reduce(add, range(1000))
Run Code Online (Sandbox Code Playgroud)
10000个循环,最佳3:每循环80.1μs
同时:
%timeit add(10, 100)
%timeit 10 + 100
10000000 loops, best of 3: 94.3 ns per loop
100000000 loops, best of 3: 14.7 ns per loop
Run Code Online (Sandbox Code Playgroud)
那么,为什么第三种情况会加速约50%呢?
我需要快速编写(或借用)任何语言的东西,自动过滤大量的python源代码以删除注释.目标是使目标平台上的代码更紧凑(并且作为旁边的逆向工程甚至更加困难).我必须积极地修改代码的行为,并且可以使用一些剩余的注释.我的输入和输出应该是一个.py文本文件,假设是有效的python 2.x(假设:限制为ASCII,我将负责UTF8).
严格地说,我也不会需要删除通过定义的那种评论
注释以散列字符(
#)开头,该散列字符不是字符串文字的一部分,并在物理行的末尾结束.
因为python tokenizer已经为我做了,最后代码被分发为.pyc.太糟糕了,因为我清楚地看到如何做的是干净的(唯一稍微棘手的部分是令人费解的字符串常量的语法在Python).
我的问题是,粗略地看一下我必须过滤的python源代码,它显示它包含了很多注释,这些注释不是由引入的#,而只是字符串文字,不执行任何有用的任务.这些被明确地保存在.pyc标记化文件中.他们到处都是,我被告知要方便自动生成文档和编辑.许多真正是注释的字符串文字都嵌入在函数定义中,例如:
def OnForceStatusChoice(self,event):
"""Action when a status is selected"""
self.ExecutionPanel.SetFocus()
Run Code Online (Sandbox Code Playgroud)
另一方面,有大量的字符串文字是有用的文本,包括要显示给用户的英文文本,以及表的初始化.这使得无法自动安全地识别那些真正是字符串文字值的注释的字符串文字.
从我的抽样中,大多数真正是注释的字符串文字似乎都是由"""(很少有例外,我也许可以忍受),但我理解足够的python知道我无法安全地删除所有这些字符串文字.
我可以安全地(或者对编码风格有一些陈述和合理的假设)假设
.py文件中的第一件事,忽略#注释,是一个字符串文字,它可以递归删除?如果是的话,通过忽略(并保留)#评论旁边的其他内容,可以使这条规则变得更强大吗?def可以删除在语法匹配函数定义(如上所述)之后开始的任何字符串文字?如果是,我如何精确定义 语法匹配函数定义?请回答我无法从随机的字节集合中告诉python,这与现实相差无几.
python ×7
eclipse ×1
flags ×1
grammar ×1
optimization ×1
parsing ×1
pydev ×1
supervisord ×1
sys ×1