分类
大小:26.3M更新:2020-05-15
类别:编程工具系统:WinAll
Python是一种编程语言,它使用对象,类和清晰的语法语言来帮助您创建,编辑和生成自己的应用程序。无论你是编程新手还是经验丰富的开发人员,都可以轻松学习和使用Python。有需要的小伙伴欢迎来西西下载Python2020最新版本。
以交互方式编写 Python 代码
Python 的解释器允许您编写和执行代码,以及定义变量。突出显示的是语法语言的简单性,旨在帮助您以交互方式编写代码,从而显着提高可读性并缩短调试时间。
轻松创建,测试和编辑代码
用 Python 编写的代码可以通过在解释器中运行来多次编辑和测试。与其他语言不同,它不会限制您在执行环境之外编辑代码,因此您只需使用解释器进行更改即可。
由于它是一种面向对象的编程语言,Python 使用数据结构将信息存储在主程序无法访问的位置,可以使用专用函数检索。
由于其语法清晰,任何计算机用户都可以轻松理解 Python。如果您刚开始学习编程,开发人员的网站会为您提供多个教程和资源。
新功能
赋值表达式
有一种新语法:=可将值赋给变量,作为较大表达式的一部分。由于它与海象的眼睛和象牙很像,因此被亲切地称为“海象操作员” 。
在此示例中,赋值表达式有助于避免调用 len()两次:
if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)")
在正则表达式匹配期间会产生类似的好处,其中需要两次匹配对象,一次是测试是否发生匹配,另一次是提取子组:
discount = 0.0if (mo := re.search(r'(\d+)% discount', advertisement)): discount = float(mo.group(1)) / 100.0
该运算符对while循环也很有用,该循环计算一个值以测试循环终止,然后在循环体中再次需要相同的值:
# Loop over fixed length blockswhile (block := f.read(256)) != '': process(block)
另一个具有启发性的用例出现在列表理解中,其中表达式主体中还需要在过滤条件下计算出的值:
[clean_name.title() for name in names if (clean_name := normalize('NFC', name)) in allowed_names]
尝试限制使用海象运算符来清理可降低复杂性并提高可读性的案例。
看到 有关完整说明,请参见PEP 572。
(由Emily Morehouse在bpo-35224中贡献。)
仅位置参数
有一个新的函数参数语法,/以指示某些函数参数必须在位置上指定,并且不能用作关键字参数。这help()与用Larry Hastings的Argument Clinic工具注释的C函数所显示的符号相同。
在以下示例中,参数a和b是仅位置的,而c或d可以是位置或关键字,而e或f必须是关键字:
def f(a, b, /, c, d, *, e, f): print(a, b, c, d, e, f)
以下是有效的呼叫:
f(10, 20, 30, d=40, e=50, f=60)
但是,这些是无效的调用:
f(10, b=20, c=30, d=40, e=50, f=60) # b cannot be a keyword argumentf(10, 20, 30, 40, 50, f=60) # e must be a keyword argument
这种表示法的一个用例是,它允许纯Python函数完全模拟现有C编码函数的行为。例如,内置divmod()函数不接受关键字参数:
def divmod(a, b, /): "Emulate the built in divmod() function" return (a // b, a % b)
另一个用例是在参数名称无用时排除关键字参数。例如,内置len()函数具有签名。这避免了尴尬的调用,例如:len(obj, /)
len(obj='hello') # The "obj" keyword argument impairs readability
将参数标记为仅位置的另一个好处是,它允许将来更改参数名称而不会破坏客户端代码。例如,在statistics模块中,将来可能会更改参数名称dist。可以通过以下功能规范来实现:
def quantiles(dist, /, *, n=4, method='exclusive') ...
由于左侧的参数/未作为可能的关键字公开,因此参数名称仍可用于**kwargs:
>>>
>>> def f(a, b, /, **kwargs):... print(a, b, kwargs)...>>> f(10, 20, a=1, b=2, c=3) # a and b are used in two ways10 20 {'a': 1, 'b': 2, 'c': 3}
这大大简化了需要接受任意关键字参数的函数和方法的实现。例如,以下是该collections模块中代码的摘录:
class Counter(dict): def __init__(self, iterable=None, /, **kwds): # Note "iterable" is a possible keyword argument
看到 有关完整说明,请参见PEP 570。
(由Pablo Galindo在bpo-36540中贡献。)
编译后的字节码文件的并行文件系统缓存
新的 PYTHONPYCACHEPREFIX设置(也可作为 )将隐式字节码缓存配置为使用单独的并行文件系统树,而不是每个源目录中的默认子目录。-X pycache_prefix__pycache__
缓存的位置报告在sys.pycache_prefix (None指示__pycache__ 子目录中的默认位置)。
(由Carl Meyer在bpo-33499中贡献。)
调试版本使用与发布版本相同的
不管是在发布模式还是调试模式下构建,Python现在都使用相同的ABI。在Unix上,当Python以调试模式构建时,现在可以加载以发布模式构建的C扩展和使用稳定ABI构建的C扩展。
现在,发行版本和调试版本与ABI兼容:定义 Py_DEBUG宏不再意味着该Py_TRACE_REFS宏,它引入了唯一的ABI不兼容性。该Py_TRACE_REFS宏,它增加了sys.getobjects()功能和PYTHONDUMPREFS 环境变量,可以使用新的 构建选项进行设置。(由Victor Stinner在bpo-36465中贡献。)./configure --with-trace-refs
在Unix上,除了Android和Cygwin之外,C扩展不再链接到libpython。现在,静态链接的Python可以加载使用共享库Python构建的C扩展。(由Victor Stinner在bpo-21536中贡献。)
在Unix上,当Python以调试模式构建时,import现在还将寻找以发布模式编译的C扩展以及使用稳定的ABI编译的C扩展。(由Victor Stinner在bpo-36722中贡献。)
要将Python嵌入到应用程序中,--embed必须传递一个新选项 以获取(将应用程序链接到libpython)。要同时支持3.8和更早版本的3.8,请首先尝试使用该命令,如果先前的命令失败,则回退到(无)。python3-config --libs --embed-lpython3.8python3-config --libs --embedpython3-config --libs--embed
添加pkg-config python-3.8-embed模块以将Python嵌入到应用程序中:includes 。要同时支持3.8和更早版本的3.8,请首先尝试使用该命令,如果先前的命令失败,则回退到(无)(用Python版本替换)。pkg-config python-3.8-embed --libs-lpython3.8pkg-config python-X.Y-embed --libspkg-config python-X.Y --libs--embedX.Y
另一方面,不再包含 。C扩展不得链接到libpython(Android和Cygwin除外,它们的情况由脚本处理);此更改是有意向后不兼容的。(由Victor Stinner在bpo-36721中贡献。)pkg-config python3.8 --libs-lpython3.8
f字符串支持=自记录表达式和调试
=在f-string中添加了一个说明符。f字符串(例如) f'{expr=}'将扩展为表达式的文本,等号,然后扩展为求值表达式的表示形式。例如:
>>>
>>> user = 'eric_idle'>>> member_since = date(1975, 7, 31)>>> f'{user=} {member_since=}'"user='eric_idle' member_since=datetime.date(1975, 7, 31)"
常用的f字符串格式说明符允许对表达式结果的显示方式进行更多控制:
>>>
>>> delta = date.today() - member_since>>> f'{user=!s} {delta.days=:,d}''user=eric_idle delta.days=16,075'
的=说明符将显示整个表达式所以可以示出的计算:
>>>
>>> print(f'{theta=} {cos(radians(theta))=:.3f}')theta=30 cos(radians(theta))=0.866
(由Eric V. Smith和Larry Hastings在bpo-36817中贡献。)
PEP 578:Python运行时审核挂钩
PEP添加了“审核挂钩”和“已验证的打开挂钩”。两者都可以从Python和本机代码获得,从而允许使用纯Python代码编写的应用程序和框架利用额外的通知,同时还允许嵌入程序或系统管理员在始终启用审核的情况下部署Python版本。
看到 PEP 578详细信息。
PEP 587:Python初始化配置
的 PEP 587添加了新的C API以配置Python初始化,从而提供了对整个配置的更好控制和更好的错误报告。
如何在Windows下运行Python程序?
这不一定是一个简单的问题。如果您已经熟悉从Windows命令行运行程序,那么一切似乎都是显而易见的。否则,您可能需要更多指导。
除非使用某种集成开发环境,否则最终将 在各种称为“ DOS窗口”或“命令提示窗口”的窗口中键入 Windows命令。通常,您可以通过搜索从搜索栏创建这样的窗口cmd。您应该能够识别出何时启动了这样的窗口,因为您将看到Windows“命令提示符”,通常如下所示:
C:\>
该字母可能有所不同,并且后面可能还有其他内容,因此您可能会很容易看到以下内容:
D:\YourName\Projects\Python>
取决于计算机的设置方式以及您最近对计算机所做的其他操作。一旦启动了这样的窗口,就可以很好地运行Python程序。
您需要意识到Python脚本必须由另一个称为Python 解释器的程序处理。解释器读取您的脚本,将其编译为字节码,然后执行字节码以运行您的程序。那么,如何安排解释器处理Python?
首先,您需要确保命令窗口将单词“ py”识别为启动解释器的指令。如果您打开了命令窗口,则应尝试输入命令py并按回车键:
C:\Users\YourName> py
然后,您应该看到类似以下内容:
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>>
您已经以“交互模式”启动了解释器。这意味着您可以交互输入Python语句或表达式,并在等待时执行或评估它们。这是Python最强大的功能之一。通过输入一些您选择的表达式并查看结果来进行检查:
>>>
>>> print("Hello")Hello>>> "Hello" * 3'HelloHelloHello'
许多人将交互模式用作方便但高度可编程的计算器。当您想结束交互式Python会话时,请在输入a的同时调用该exit()函数或按住Ctrl键Z,然后按“ Enter”键以返回Windows命令提示符。
您可能还会发现,您有一个开始菜单项,例如开始Start程序‣Python 3.x‣Python(命令行),这会导致您>>>在新窗口中看到提示。如果是这样,则在您调用exit()函数或输入Ctrl-Z 字符后,该窗口将消失;Windows在窗口中运行单个“ python”命令,并在终止解释器时将其关闭。
现在我们知道该py命令已被识别,您可以为其提供Python脚本了。您必须提供Python脚本的绝对路径或相对路径。假设您的Python脚本位于您的桌面上,名为hello.py,并且您的主目录中很好地打开了命令提示符,因此您会看到类似以下内容的内容:
C:\Users\YourName>
因此,现在您将要求该py命令py通过在脚本路径后键入以下内容来将脚本提供给Python :
C:\Users\YourName> py Desktop\hello.py hello
如何使Python脚本可执行?
在Windows上,标准的Python安装程序已经将.py扩展名与文件类型(Python.File)关联,并为该文件类型提供了运行解释器()的打开命令。这足以使脚本在命令提示符下以“ foo.py”的身份可执行。如果您希望能够通过简单地键入'foo'而没有扩展名来执行脚本,则需要将.py添加到PATHEXT环境变量中。D:\Program Files\Python\python.exe "%1" %*
为什么Python有时需要很长时间才能启动?
通常,Python在Windows上的启动速度非常快,但偶尔也有错误报告称Python突然开始需要很长时间才能启动。这使您更加困惑,因为Python在其他配置相同的Windows系统上可以正常工作。
该问题可能是由问题机器上的病毒检查软件配置错误引起的。当某些病毒扫描程序配置为监视来自文件系统的所有读取时,会引入两个数量级的启动开销。尝试检查系统上病毒扫描软件的配置,以确保它们的配置确实相同。McAfee被配置为扫描所有文件系统读取活动时,是一个特别的冒犯者。
如何从Python脚本制作可执行文件?
有关distutils扩展的信息,请参见cx_Freeze,该扩展允许您从Python代码创建控制台和GUI可执行文件。 py2exe是构建基于Python 2.x的可执行文件的最流行的扩展,尚不支持Python 3,但正在开发中。
是一个*.pyd文件相同的DLL?
是的,.pyd文件是dll的文件,但是有一些区别。如果您有一个名为的DLL foo.pyd,则它必须具有一个函数PyInit_foo()。然后,您可以编写Python“ import foo”,Python将搜索foo.pyd(以及foo.py,foo.pyc),如果找到,将尝试调用PyInit_foo()以对其进行初始化。您不要将.exe与foo.lib链接,因为那样会使Windows要求该DLL存在。
请注意,foo.pyd的搜索路径是PYTHONPATH,与Windows用于搜索foo.dll的路径不同。另外,不需要foo.pyd即可运行程序,而如果将程序与dll链接,则该dll是必需的。当然,如果您想说foo.pyd是必需的。在DLL中,链接在源代码中用声明。在.pyd中,链接在可用功能列表中定义。import foo__declspec(dllexport)
如何将Python嵌入Windows应用程序?
将Python解释器嵌入Windows应用程序可以总结如下:
不要直接将Python构建到.exe文件中。在Windows上,Python必须是DLL才能处理本身就是DLL的导入模块。(这是第一个未记录的关键事实。)相反,链接到;。它通常安装在中。 NN是Python版本,对于Python 3.3,数字是“ 33”。pythonNN.dllC:\Windows\System
您可以通过两种不同的方式链接到Python。加载时链接表示针对,而运行时链接表示针对。(一般说明:是对应于的所谓的“ import lib” 。它仅定义链接器的符号。)pythonNN.libpythonNN.dllpythonNN.libpythonNN.dll
运行时链接大大简化了链接选项;一切都在运行时发生。您的代码必须使用Windows 例程加载。该代码还必须使用Windows 例程获取的指针使用访问例程和数据(即Python的C API)。宏可以使这些指针对调用Python C API中的例程的任何C代码透明。pythonNN.dllLoadLibraryEx()pythonNN.dllGetProcAddress()
Borland注意:首先使用Coff2Omf.exe 转换为OMF格式。pythonNN.lib
如果您使用SWIG,则很容易创建一个Python“扩展模块”,它将使应用程序的数据和方法可供Python使用。SWIG将为您处理几乎所有繁琐的细节。结果是链接到您的.exe文件的C代码 (!)您不必创建DLL文件,而且还简化了链接。
SWIG将创建一个初始化函数(C函数),该函数的名称取决于扩展模块的名称。例如,如果模块的名称是leo,则init函数将称为initleo()。如果您应该使用SWIG阴影类,则init函数将称为initleoc()。这将初始化阴影类使用的几乎隐藏的帮助程序类。
您可以将第2步中的C代码链接到.exe文件的原因是,调用初始化函数等效于将模块导入Python!(这是第二个未记录的关键事实。)
简而言之,您可以使用以下代码通过扩展模块初始化Python解释器。
#include "python.h"...Py_Initialize(); // Initialize Python.initmyAppc(); // Initialize (import) the helper class.PyRun_SimpleString("import myApp"); // Import the shadow class.
Python的C API存在两个问题,如果您使用MSVC(用于构建pythonNN.dll的编译器)以外的其他编译器,这些问题将变得显而易见。
问题1:带有FILE *参数的所谓“非常高级”函数在多编译器环境中将不起作用,因为每个编译器对结构FILE的概念将有所不同。从实现的角度来看,这些是非常低级的功能。
问题2:在生成包装器以使函数无效时,SWIG生成以下代码:
Py_INCREF(Py_None);_resultobj = Py_None;return _resultobj;
las,Py_None是一个宏,它扩展为对pythonNN.dll中称为_Py_NoneStruct的复杂数据结构的引用。同样,此代码在多编译器环境中将失败。将此类代码替换为:
return Py_BuildValue("");
%typemap尽管我无法使它生效(我是完整的SWIG新手),但也许可以使用SWIG的命令自动进行更改。
在Windows应用程序内部使用Python Shell脚本建立Python解释器窗口不是一个好主意;生成的窗口将独立于您应用程序的窗口系统。相反,您(或wxPythonWindow类)应创建一个“本机”解释器窗口。将该窗口连接到Python解释器很容易。您可以将Python的I / O重定向到支持读取和写入的_any_对象,因此您所需要的只是一个包含read()和write()方法的Python对象(在扩展模块中定义)。
如何防止编辑器将制表符插入我的Python源代码?
FAQ不建议使用标签和Python样式指南, PEP 8,建议分布式Python代码有4个空格;这也是Emacs的python-mode默认设置。
在任何编辑器下,混合使用制表符和空格是一个坏主意。MSVC在这方面没有什么不同,并且可以很容易地配置为使用空格:选取“ 工具”‣“选项”‣“选项卡”,对于文件类型“默认”,将“标签大小”和“缩进大小”设置为4,然后选择“插入空格”单选按钮。
Python引发,IndentationError或者TabError制表符和空格混合导致前导空格出现问题。您也可以运行该tabnanny模块以批处理方式检查目录树。
如何检查按键是否畅通无阻?
使用msvcrt模块。这是Windows的标准扩展模块。它定义了一个功能kbhit(),该功能检查是否存在键盘击键,并getch()获得一个字符而不回显它。
Seraph脚本编辑器编程工具Mv7.7最新版
查看网页制作工具(HTML Executable)编程工具MV4.8.0.0正式版
查看EditRocket文本编辑器编程工具Mv4.2.2.0 绿色版
查看source insight 最新版编程工具M4.00.0084 官方版
查看既得Python编辑器编程工具M1.0.0.0
查看便携版emeditor升级工具编程工具M
查看WPF全球化LocBaml.exe工具编程工具.02M
查看x64dbg辅助管理器编程工具.37M1.0内测版
查看前端编程神器(VS Code 2020)编程工具Mv1.44.0最新版
查看Visual Basic编程工具M6.0 精简单文件中文版
查看ultracompare通杀补丁编程工具Mv1.0绿色破解版
查看百度文本编辑器(Ueditor)编程工具Mv1.4.3.3
查看Qt libraries编程工具M4.8.1 官方完整版
查看CLG乱序工具编程工具.06M1.2最新版
查看EOVA快速开发平台编程工具M官方最新版
查看网络封包抓取工具(WinPcap)编程工具.86MV4.1.3 官方版
查看微信小应用程序开发工具编程工具M免费版
查看UI插件集合体JQuery EasyUI编程工具Mv1.7 官方版
查看代码编辑器(Graviton)编程工具Mv1.1.0官方版
查看凹凸组合测试编程工具.27Mv1.0 正式版
查看Agenaedit中文版编程工具M2.4.0绿色版
查看Ly正则表达式测试编程工具.11M1.0
查看mPython编程软件编程工具M0.5.0官方版
查看图形化编程软件(linkboy)编程工具Mv3.6十周年特别版
查看点击查看更多