假设这段代码:
>>> iterator=filter(lambda x: x % 3 == 0, [2, 18, 9, 22, 17, 24, 8, 12, 27])
>>> x=int()
>>> locals()
{'__package__': None, '__spec__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>, 'iterator': <filter object at 0x02E732B0>, 'x': 0, '__doc__': None}
>>> globals()
{'__package__': None, '__spec__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>, 'iterator': <filter object at 0x02E732B0>, 'x': 0, '__doc__': None}
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'iterator', 'x']
>>>
Run Code Online (Sandbox Code Playgroud)
locals,globals和dir有什么区别?什么是用法?
在python 3中,每个东西都是objs,函数也是如此.函数是一等公民,这意味着我们可以像其他变量一样做.
>>> class x:
pass
>>>
>>> isinstance(x,type)
True
>>> type(x)
<class 'type'>
>>>
>>> x=12
>>> isinstance(x,int)
True
>>> type(x)
<class 'int'>
>>>
Run Code Online (Sandbox Code Playgroud)
但功能不同!:
>>> def x():
pass
>>> type(x)
<class 'function'>
>>> isinstance(x,function)
Traceback (most recent call last):
File "<pyshell#56>", line 1, in <module>
isinstance(x,function)
NameError: name 'function' is not defined
>>>
Run Code Online (Sandbox Code Playgroud)
为什么错误?什么是python函数类型?
我有一个TypeClass来制作类:
class MyMetaClass(type):
def __new__(cls, *args, **kwargs):
print('call __new__ from MyMetaClass.')
return type(cls.__name__, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
但是在使用时:
Foo= MyMetaClass('Foo', (), {'name':'pd'})
Run Code Online (Sandbox Code Playgroud)
提出错误:
TypeError: type() takes 1 or 3 arguments
Run Code Online (Sandbox Code Playgroud)
如果改变它:
class MyMetaClass(type):
def __new__(cls, *args, **kwargs):
print('call __new__ from MyMetaClass.')
return type(cls.__name__, (), {})
Run Code Online (Sandbox Code Playgroud)
它会起作用!哪里有问题?
问题出在哪儿?
import nmap
Run Code Online (Sandbox Code Playgroud)
我安装了nmap和python,当我使用时import nmap没有任何问题.但使用时:
nmap.PortScanner()
Run Code Online (Sandbox Code Playgroud)
抛出此错误:
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
nmap.PortScanner()
File "./nmap/nmap.py", line 153, in __init__
raise PortScannerError('nmap program was not found in path. PATH is:{0}'.format(os.getenv('PATH')))
nmap.nmap.PortScannerError: 'nmap program was not found in path. PATH is : /usr/lib /lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games: /usr/local/games'"
Run Code Online (Sandbox Code Playgroud) 如果你像这样比较两个字符串有什么问题:
>>> "1111">'19'
False
>>> "1111"<'19'
True
Run Code Online (Sandbox Code Playgroud)
为什么'1111'小于'19'?
我想在SuperClass中打印所有子类,并在子类中打印所有SuperClasses:
class SuperClass():
def Print(self):
print('my sub classes are : ')
#print all childs
class Sub1(SuperClass,...):
def Print(self):
print('My parents are :')
#print all SuperClasses
class Sub2(SuperClass,...):
def Print(self):
print('My parents are :')
#print all SuperClasses
Run Code Online (Sandbox Code Playgroud)
SuperClass有Print打印所有继承的类,Sub有Print打印方法打印所有的SuperClasses.怎么办?