python命令帮助 pyc文件生成 python语法特性 python3新特性 jupyter使用介绍

2015-04-10 22:07:00
admin
原创 3528
摘要:python命令帮助 pyc文件生成 python语法特性 python3新特性 jupyter使用介绍

一、python命令帮助

1、python --help,查看帮助;

2、python --version,查看版本;


执行系统模块:

1、系统模块从sys.path查找;

2、执行方法python -m module;


优雅展示json,展示中文需要使用json模块编写代码:

echo '{"key":"value"}' | python -m json.tool


二、pyc文件生成

1、pyc文件是py文件编译后生成,是一种跨平台的字节码,加载和执行速度非常快;

2、pyc文件不能看到源码,所以商业软件可以通过发布pyc文件防止源码泄露;

3、pyc文件跟python版本相关,基本不能向前兼容,旧版本python不能执行新版本pyc文件;


生成单个pyc文件:

import py_compile

py_compile.compile('pyfile')


批量生成pyc文件:

import compileall
compileall.compile_dir('pydir')


禁止生成pyc文件:

import sys
sys.dont_write_bytecode = True


三、python语法特性

语法特性:

1、字符串乘法:"str" * num,str复制num次数;

2、列表乘法:ints = [i*2 for i in range(5)],计算生成新列表;

3、三元运算符:true_expression if condition else false_expression

4、Ellipsis(...):省略号是一个特殊对象,只是一个占位符,含义取决于谁用他;

5、Ellipsis(...):可以表示函数体占位,可以表示任意参数占位,可以表示必填参数占位;


可变参数:

1、*args可变参数,本质是tuple,传参时不指定参数名,普通参数位于*args前后都可以

2、**kwargs可变参数,本质是dict,传参时指定参数名,普通参数必须位于**kwargs前面;

3、*args必须位于**kwargs前面,推荐参数顺序:args、*args、**kwargs;

4、/,前面是位置参数,*,后面是关键字参数,两者之间可位置也可关键字;


解包压包:

1、解包操作:a = [1, 2]; b = [*a, 3, 4],结果是b = [1, 2, 3, 4]

2、压包操作:a = [1, 2, 3, 4]; v1,v2,*list3 = a,结果是list3=[3, 4]


四、python面向对象

面向对象:

1、__new__方法用于给对象分配内存,__init__方法用于设置对象属性;

2、支持多继承,一个类可以有多个基类,MRO解决了多继承时查找方法和属性的顺序;

3、子类继承了父类的所有函数,子类不定义自己的构造函数,会直接继承父类的构造函数;

4、不支持方法重载,类中不能定义同名方法,支持方法重写,子类可以覆盖父类同名方法;

5、@overload,函数类型提示增强,自动补全和类型检查更准确,不改变任何运行时逻辑;

6、@classmethod申明类方法,@staticmethod申明静态方法,method(self)申明实例方法;

7、@classmethod的参数传递了具体调用类,子类调用传递子类,继承场景下更加灵活;


元类metaclass:

1、元类用于创建类,默认type创建所有类,可以自定义元类收集信息,在类实例化时进行校验;

2、定义元类:class MyMeta(type),__new__创建类,__init__初始化类,一般实现前者就可以;

3、使用元类:class MyClass(metaclass=MyMeta)


五、泛型机制

1、Generic支持参数泛型化,类或方法的参数可以是多种类型;

2、Protocol定义接口要求,继承了Generic,也支持参数泛型化;

3、一个类继承了Protocol,那么他的父类也必须继承Protocol;


泛型参数示例:

from typing import TypeVar, Generic
T = TypeVar("T")
class MyClass(Generic[T]):
    def __init__(self, value: T):
        pass


定义接口要求(普通接口):

from typing import Protocol
class Drawable(Protocol):
    def draw(self) -> None: ...


定义接口要求(泛型参数接口):

from typing import Protocol, TypeVar, Iterator
T = TypeVar("T")
class Iterable(Protocol[T]):
    def __iter__(self) -> Iterator[T]: ...


六、python3新特性

1、官方已经不再支持python2,写代码需要使用python3;

2、Scripts目录下的pip.exe、pip3.exe、pip3.x.exe是同一程序;

3、print变成函数,函数格式是print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False);

4、f-string是一种新的字符串格式化方法,可以在字符串中直接引用变量,格式化功能非常强大;

5、bytes是字节数组,string编码可以转换为bytes,bytes解码可以转换为string;

6、Any是一种类型注解,表示一个变量可能是任意类型,编译器不要类型检查;

7、Union是一种类型注解,表示一个变量属于多种类型中的一种,灵活且安全;

8、Optional表示一个变量属于一种类型或None,Optional[X]=Union[X,None]

9、Self是一种类型注解,表示一个实例的真实类型,在继承场景下非常方便;

10、Annotated在类型上附加元数据,不影响类型本身,第一个参数是类型;

11、默认除法是浮点数除法,结果是float类型,双斜杠除法是整数除法;


创建bytes:

bs1 = (0x0488ADE4).to_bytes(4, "big")
bs2 = bytes.fromhex("0488ADE4")
bs3 = b"\x04\x88\xad\xe4"
bs4 = bytes([i for i in range(0, 10)])
bs5 = bytes(8)#length is 8
print(bs1)
print(bs2)
print(bs3)
print(bs4)
print(bs5)


修改bytes:

msg = 'message'
bs = msg.encode()
bytearr = bytearray(bs)
bytearr[0] = ord('0')
print(bytes(bytearr))


连接bytes:

b"".join([b1,b2,b3])


七、jupyter使用介绍

1、jupyter是一个交互式笔记本,可以交互式执行命令,非常适合科学计算;

2、ipython是交互式python,内核是ipykernal,交互执行能力非常强大;

3、jupyter安装:pip.exe install jupyter

4、jupyter启动:jupyter.exe notebook --notebook-dir jupyterwork

发表评论
评论通过审核之后才会显示。