执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码
举例如下:
1 | >>> exec('print("Hello World")') |
进阶
exec除了接收上面的python语句块之外,还可以接收表示全局和局部命名空间的参数
如
1 | >>> x = 10 |
执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码
举例如下:
1 | >>> exec('print("Hello World")') |
进阶
exec除了接收上面的python语句块之外,还可以接收表示全局和局部命名空间的参数
如
1 | >>> x = 10 |
顾名思义,这个使用来删除属性的
delattr(x, 'foobar')
相等于del x.foobar
举例说明
1 | class A: |
不太知道什么场景会用这个
主要用来执行字符串表达式,和 compile
有一些区别,后者功能更加强大,可以编译字符串格式的python代码,而eval更多的是基础运算
举例如下:
1 | >>> a = 10 |
请注意,eval对表达式有限定,如果需要更丰富的支持,可以考虑exec
数学中的复数,通过complex
可以简单的生成
1 | >>> complex(1, 2) |
注意,字符串转换时,加号左右两边不能有空格
将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
一个常见的使用case
1 | >>> seq = ['one', 'two', 'three'] |
接收两个数字类型(非复数)参数,返回一个包含商和余数的元组(a // b, a % b)
1 | >>> divmod(10, 3) |
不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表
语法
1 | dir([object]) |
实例
1 | >>> class A: |
dict用于创建字典
1 | >>> dict() |
请注意,传参为可迭代的序列的场景
将一个字符串编译为字节代码
这个比较厉害了,传入一段字符串,把它编译成可执行的脚本
语法
1 | compile(source, filename, mode[, flags[, dont_inherit]]) |
source
– 字符串或者AST(Abstract Syntax Trees)对象。。filename
– 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。mode
– 指定编译代码的种类。可以指定为 exec
, eval
, single
。flags
– 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。。flags
和dont_inherit
是用来控制编译源码时的标志举例说明
1 | >>> str = "for i in range(0,10): print(i)" |
修饰符对应的函数不需要实例化,不需要self
参数,第一个参数需要是表示自身类的cls
参数,可以来调用类的属性,类的方法,实例化对象
举例如下:
1 | >>> class A: |
chr()
参数为整数,返回一个对应的字符
1 | >>> chr(10) |
请注意传参可以为10进制,也可以为16进制,取值为 [0,114111]/[0,0x10FFFF]
)
检查一个对象是否是可调用,对于函数、方法、lambda 函式、 类以及实现了 __call__
方法的类实例, 它都返回 True
1 | >>> callable(10) |
返回一个新的 bytes 对象,该对象是一个 0 <= x < 256 区间内的整数不可变序列。它是 bytearray 的不可变版本。
基本用法和 bytearray 相似,唯一区别是返回的数组是不可变的
举例如下
1 | >>> bytes([1,2,3]) |
请注意,数组内容不可变,强制赋值时抛异常
返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256
语法:
1 | class bytearray([source[, encoding[, errors]]]) |
参数说明:
实例
1 | >>> bytearray('hello', 'utf-8') |
bool()
函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。
bool 是 int 的子类。
1 | >>> bool('True') |
bin()
返回一个整数 int 或者长整数 long int 的二进制表示。
1 | >>> bin(10) |
ascii()
函数类似 repr()
函数, 返回一个表示对象的字符串, 但是对于字符串中的非 ASCII 字符则返回通过 repr()
函数使用 \x, \u 或 \U 编码的字符
举例如下:
1 | >>> ascii('你好hello') |
any与all作用比较像,区别在于只要有一个为true,则返回True
1 | >>> any([0, '', False]) |
接下来我们将针对python的内置函数进行逐一说明,本文将介绍abs()
– 返回数字的绝对值
1 | abs(-10) |
请注意:如果参数是一个复数,则返回它的大小
1 | >>> abs(complex(-10, 1)) |
使用python来加载or输出json对象属于很方便的操作了,因为官方库中直接集成了对应的操作库,之前说过一篇《Python之json无法序列化部分类型数据问题解决方案》,这里介绍一下另外的一些用法,如何输出格式化的json字符串
json字符串目前可以算是前后端的主流交互格式了,在python中,原生支持json的序列化和反序列化,使用起来比较简单
1 | import json |
os.chown() 方法用于更改文件所有者,如果不修改可以设置为 -1, 你需要超级用户权限来执行权限修改操作
1 | os.chown(path, uid, gid); |
参数:
os提供了chmod
来修改文件权限,基本上和shell命令操作差不多了
1 | os.chmod(path, mod) |
flags – 可用以下选项按位或操作生成, 目录的读权限表示可以获取目录里文件名列表, ,执行权限表示可以把工作目录切换到此目录 ,删除添加目录里的文件必须同时有写和执行权限 ,文件权限以用户id->组id->其它顺序检验,最先匹配的允许或禁止权限被应用。
在linux系统中,文件的越权访问相对常见,比如普通用户无法访问root用户文件,在python中,可以借助os.access()
来判断
1 | os.access(path, mode); |
在用python调用shell脚本时,可以用到功能当前工作目录
1 | os.chdir(path) |
实例如下
1 | >>> import os |
上一篇介绍了shutil
实现文件移动的功能,接下来介绍使用它来实现目录压缩
一个简单的实例case,将/tmp/test
目录打包压缩为out.zip
1 | import shutil |
在shell里面,直接使用mv
命令实现目录文件的移动,那么python中可以怎么做呢?
1 | import shutil |
当我们写入数据到一个文件时,假设这个文件所在的某个目录不存在,那么会抛异常,所以我们就需要在目录不存在时创建目录,这个场景比较常见,可以直接借助os来实现
1 | import os |
如何遍历一个目录下的所有文件?
1 | import os |
如何将内容保存到文件中?
借助with
语句可以简单的实现
1 | with open('demo.txt', 'w+') as f: |
请注意,上面的write表示一次写入,如果你希望一次写入多个数据,可以使用 writeline
1 | with open('demo.txt', 'w+') as f: |
文件按行读取的两种方式
case1:
1 | for line in iopen('demo.txt', 'r+'): |
case2:
1 | with open('demo.txt', 'r+') as f: |
记录下在python中获取文件大小的使用方法
1 | import os |
输出文件的字节数,单位为B,int型
文件操作,主要借助open
函数来实现,定义如下
1 | open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) |
对应的参数说明
其中mode采用的参数和c语言的差不多
w
写,文件不存在时,创建wb
二进制写r
读rb
二进制读a
追加写ab
追加写二进制w+
这个+表示支持读写在使用python的request库进行网络访问时,当url是一个https的链接,居然没法正常玩耍,直接提示
1 | <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1051)> |
返回一个对象属性值
1 | >>> class A: |
请注意:如果获取属性不存在,且没有设置默认值时,会抛异常
请求参数解析属于比较常见和基础的操作技能了,如果希望我们的脚本可以在启动时,传入一些参数,来实现不同的环境指定,条件判断等,可以怎么处理呢?
本篇将介绍在python中,如何优雅的使用getopt,来解析我们的命令行参数
环境区分,一种常见的case就是根据ip地址段进行界定,通过给开发环境,测试环境和生成环境映射到不同的ip地址段机器,因此也就有了获取ip地址的需求
最近正好用到了16进制和十进制之间的互转,发现python相比于java而言,有更优雅的实现方式,下面记录一二
16进制转10进制
1 | s = '0x12da' |
10进制转16进制
1 | ans = hex(120) |
dict内置方法中,有一个fromkeys
,可以用于创建新的字典,以seq序列中的元素作为键,value作为所有键的初始化值
1 | dict.fromkeys(seq[,value]) |
Python字典提供了一些内置的方法,可以减少大量的操作
Update your browser to view this website correctly. Update my browser now