我对"内置"功能一词感到困惑.我认为这只意味着内置于解释器中的那些函数并记录在其中 -
2.内置函数
但似乎标准库模块中定义的函数也是内置函数(在某些情况下).例如 -
>>> import os
>>> os.chdir
<built-in function chdir>
>>> import warnings
>>> warnings.warn
<built-in function warn>
>>> import json
>>> json.dumps
<function dumps at 0x7f3643a240d0> # not built-in
>>> dir
<built-in function dir>
>>>
Run Code Online (Sandbox Code Playgroud)
那么什么时候标准库模块中的函数称为内置函数,何时不是?
我理解这__new__是一个静态方法,super()可以从它调用创建一个新对象,如下所示:
>>> class A:
... def __new__(cls):
... print('__new__ called')
... return super().__new__(cls)
...
>>> a = A()
__new__ called
Run Code Online (Sandbox Code Playgroud)
为什么super调用不能与其他静态方法一起使用?为什么以下失败?
>>> class B:
... @staticmethod
... def funcB():
... print('funcB called')
...
>>> class C(B):
... @staticmethod
... def funcC():
... print('funcC called')
... super().funcB()
...
>>> c = C()
>>> c.funcC()
funcC called
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in funcC
RuntimeError: super(): …Run Code Online (Sandbox Code Playgroud) 我知道在python中使用getter和setter不是pythonic。而是应该使用属性装饰器。但我想知道以下场景 -
我有一个用几个实例属性初始化的类。然后稍后我需要向类添加其他实例属性。如果我不使用setter,那么我必须object.attribute = value在课外到处写。该类将没有self.attribute代码。当我需要跟踪类的属性时,这会不会成为问题(因为它们散布在类之外的代码中)?
假设我定义了以下异常:
>>> class MyError(Exception):
... def __init__(self, arg1):
... pass
Run Code Online (Sandbox Code Playgroud)
然后我实例化该类以创建一个异常对象:
>>> e = MyError('abc')
>>> e.args
('abc',)
Run Code Online (Sandbox Code Playgroud)
这里的args属性是如何设置的?(在 中__init__,我什么都不做。)
官方文档说:
object.__bytes__(self)被调用
bytes以计算对象的字节字符串表示。这应该返回一个bytes对象。
但是当我执行dir(object)or dir(bytes)or 时dir(bytearray),该__bytes__方法不会出现。那么在哪里可以找到呢?
ctypes.cdll.LoadLibrary()call 如何None作为参数传入?当我尝试下面的代码时,似乎math库自动加载:
>>> import ctypes
>>> lib = ctypes.cdll.LoadLibrary(None)
>>> lib.sin
<_FuncPtr object at 0x7f36dd65f430>
>>> lib.exp
<_FuncPtr object at 0x7f36dd65f4f8>
>>>
Run Code Online (Sandbox Code Playgroud)
如何在math未明确指定的情况下加载库?是否加载了标准库中的所有共享库?幕后发生的事情我不明白.
我刚刚安装了Atom IDE和软件包autocomplete-python(在Windows上).但包裹不起作用.我是否必须进行任何设置更改?(我已禁用autocomplete-plus和autocomplete-snippets).
我需要单独安装Jedi吗?
我无法理解使用pickle模块还是使用struct模块。两者都将Python对象转换为字节流。它似乎pickle比包装和拆包struct模块容易。那么何时pickle使用和何时struct使用?
我试图了解执行python代码的过程。假设源具有函数定义。使用ast.parse(),我将其解析为一个ast,它将包含该FunctionDef节点类的实例。该节点实例不是可调用的,并且与函数对象不同。如何从这个ast创建具有所有dunder属性的函数对象?
在linux中,当我尝试输入input()函数的数据时,箭头键不起作用.我得到逃脱角色.见下文(当我按下左箭头键时).
dp@hp:~$ python3 -c "x = input('enter a number '); print(x)"
enter a number 123^[[D^[[D
Run Code Online (Sandbox Code Playgroud)
我readline安装了(我可以在python shell中导入它).箭头键在交互式解释器中工作正常,但在上述情况下(或input()从脚本执行时)不能正常工作.
可能是什么原因?
python ×10
python-3.x ×6
atom-editor ×1
ctypes ×1
exception ×1
linux ×1
pickle ×1
properties ×1
struct ×1
super ×1