190715 Python 内置函数之exec

执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码

举例如下:

1
2
3
4
5
6
>>> exec('print("Hello World")')
Hello World
>>> exec('for i in range(0,3): print(i)')
0
1
2

进阶

exec除了接收上面的python语句块之外,还可以接收表示全局和局部命名空间的参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> x = 10
>>> expr = """
... z = 30
... sum = x + y + z
... print(sum)
... """
>>>
>>> def func():
... y = 20
... exec(expr)
... exec(expr, {'x': 1, 'y': 2})
... exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
...
>>> func()
60
33
34

190715 Python 内置函数之delattr

顾名思义,这个使用来删除属性的

delattr(x, 'foobar') 相等于 del x.foobar

举例说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A:
... x = 10
... y = 10
... z = 20


>>> delattr(A, 'z')
>>> a = A()
>>> a.x
10
>>> a.z
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'z'

不太知道什么场景会用这个

190715 Python 内置函数之eval

主要用来执行字符串表达式,和 compile有一些区别,后者功能更加强大,可以编译字符串格式的python代码,而eval更多的是基础运算

举例如下:

1
2
3
4
5
6
7
8
>>> a = 10
>>> eval('a + 10')
20
>>> eval('pow(a,2)')
100
>>> b = [1,2]
>>> eval('b[1]')
2

请注意,eval对表达式有限定,如果需要更丰富的支持,可以考虑exec

190715 Python 内置函数之complex

数学中的复数,通过complex可以简单的生成

1
2
3
4
>>> complex(1, 2)
(1+2j)
>>> complex("1+2j")
(1+2j)

注意,字符串转换时,加号左右两边不能有空格

190715 Python 内置函数之enumerate

将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标

一个常见的使用case

1
2
3
4
5
6
7
>>> seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
... print(i, element)
...
0 one
1 two
2 three

190715 Python 内置函数之divmod

接收两个数字类型(非复数)参数,返回一个包含商和余数的元组(a // b, a % b)

1
2
>>> divmod(10, 3)
(3, 1)

190715 Python 内置函数之dir

不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表

语法

1
dir([object])

实例

1
2
3
4
5
6
7
8
>>> class A:
... x = 10
... def m():
... print('haha')
...
>>> a = A()
>>> dir(a)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'm', 'x']

190715 Python 内置函数之dict

dict用于创建字典

1
2
3
4
5
6
>>> dict()
{}
>>> dict(a='a', b='b', c='c')
{'a': 'a', 'b': 'b', 'c': 'c'}
>>> dict([(1,10), (2, 20), (3,30)])
{1: 10, 2: 20, 3: 30}

请注意,传参为可迭代的序列的场景

190715 Python 内置函数之compile

将一个字符串编译为字节代码

这个比较厉害了,传入一段字符串,把它编译成可执行的脚本

语法

1
compile(source, filename, mode[, flags[, dont_inherit]])
  • source – 字符串或者AST(Abstract Syntax Trees)对象。。
  • filename – 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
  • mode – 指定编译代码的种类。可以指定为 exec, eval, single
  • flags – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。。
  • flagsdont_inherit是用来控制编译源码时的标志

举例说明

1
2
3
>>> str = "for i in range(0,10): print(i)"
>>> c = compile(str, '', 'exec')
>>> exec(c)

190715 Python 内置函数之classmethod

修饰符对应的函数不需要实例化,不需要self参数,第一个参数需要是表示自身类的cls参数,可以来调用类的属性,类的方法,实例化对象

举例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> class A:
... a = 10
... def m1(self):
... print("m1")
...
... @classmethod
... def m2(cls):
... print(cls.a)
... # 创建对象,然后再访问方法
... cls().m1()
...
>>> A.m2()
10
m1

190715 Python 内置函数之chr

chr() 参数为整数,返回一个对应的字符

1
2
3
4
5
6
>>> chr(10)
'\n'
>>> chr(78)
'N'
>>> chr(22020)
'嘄'

请注意传参可以为10进制,也可以为16进制,取值为 [0,114111]/[0,0x10FFFF])

190715 Python 内置函数之callable

检查一个对象是否是可调用,对于函数、方法、lambda 函式、 类以及实现了 __call__ 方法的类实例, 它都返回 True

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>>> callable(10)
False

>>> def a():
... return 1
...
>>> callable(a)
True

>>> class A:
... def m():
... pass
...
>>> callable(A)
True

>>> a = A()
>>> callable(a)
>>> callable(a.m)
True

190715 Python 内置函数之bytes

返回一个新的 bytes 对象,该对象是一个 0 <= x < 256 区间内的整数不可变序列。它是 bytearray 的不可变版本。

基本用法和 bytearray 相似,唯一区别是返回的数组是不可变的

举例如下

1
2
3
4
5
6
7
8
9
10
11
12
>>> bytes([1,2,3])
b'\x01\x02\x03'
>>> bytes('hello', 'utf-8')
b'hello'
>>> bytes(1)
b'\x00'

>>> a = bytes([1,2,3])
>>> a[1] = 20
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'bytes' object does not support item assignment

请注意,数组内容不可变,强制赋值时抛异常

190715 Python 内置函数之bytearray

返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256

语法:

1
class bytearray([source[, encoding[, errors]]])

参数说明:

  • source
    • 为整数,则返回一个长度为source的初始化数组
    • 字符串,则按照指定的 encoding 将字符串转换为字节序列
    • 迭代类型,则元素必须为[0,255]之间的整数
    • 无参数,初始化数组个数为0

实例

1
2
3
4
5
6
7
8
9
10
>>> bytearray('hello', 'utf-8')
bytearray(b'hello')
>>> bytearray(2)
bytearray(b'\x00\x00')
>>> bytearray([1,2,3])
bytearray(b'\x01\x02\x03')
>>> a = bytearray([1,2,3])
>>> a[1] = 20
>>> a
bytearray(b'\x01\x14\x03')

190715 Python 内置函数之bool

bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。

bool 是 int 的子类。

1
2
3
4
5
6
>>> bool('True')
True
>>> bool('true')
True
>>> bool(2)
True

190715 Python 内置函数之bin

bin() 返回一个整数 int 或者长整数 long int 的二进制表示。

1
2
3
4
>>> bin(10)
'0b1010'
>>> bin(16)
'0b10000'

190715 Python 内置函数之ascii

ascii() 函数类似 repr() 函数, 返回一个表示对象的字符串, 但是对于字符串中的非 ASCII 字符则返回通过 repr() 函数使用 \x, \u 或 \U 编码的字符

举例如下:

1
2
>>> ascii('你好hello')
"'\\u4f60\\u597dhello'"

190715 Python 内置函数之any

any与all作用比较像,区别在于只要有一个为true,则返回True

1
2
3
4
>>> any([0, '', False])
False
>>> any([1, '', False])
True

190715 Python 内置函数之abs

接下来我们将针对python的内置函数进行逐一说明,本文将介绍abs() – 返回数字的绝对值

1
abs(-10)

请注意:如果参数是一个复数,则返回它的大小

1
2
>>> abs(complex(-10, 1))
10.04987562112089

190711-Python json格式化输出

使用python来加载or输出json对象属于很方便的操作了,因为官方库中直接集成了对应的操作库,之前说过一篇《Python之json无法序列化部分类型数据问题解决方案》,这里介绍一下另外的一些用法,如何输出格式化的json字符串

190710 Python json使用基础篇

json字符串目前可以算是前后端的主流交互格式了,在python中,原生支持json的序列化和反序列化,使用起来比较简单

1
2
3
4
5
6
7
8
import json

a = {'a': [1,2,3], 'b': {'t': 'tt', 'b': 123}}
# 转换为json字符串
b = json.dumps(a)

# json字符串转换为map
c = json.loads(b)

190702 Python 文件所属修改

os.chown() 方法用于更改文件所有者,如果不修改可以设置为 -1, 你需要超级用户权限来执行权限修改操作

1
os.chown(path, uid, gid);

参数:

  • path – 设置权限的文件路径
  • uid – 所属用户 ID
  • gid – 所属用户组 ID

190702 Python 文件权限修改

os提供了chmod来修改文件权限,基本上和shell命令操作差不多了

1
os.chmod(path, mod)

flags – 可用以下选项按位或操作生成, 目录的读权限表示可以获取目录里文件名列表, ,执行权限表示可以把工作目录切换到此目录 ,删除添加目录里的文件必须同时有写和执行权限 ,文件权限以用户id->组id->其它顺序检验,最先匹配的允许或禁止权限被应用。

  • stat.S_IXOTH: 其他用户有执行权0o001
  • stat.S_IWOTH: 其他用户有写权限0o002
  • stat.S_IROTH: 其他用户有读权限0o004
  • stat.S_IRWXO: 其他用户有全部权限(权限掩码)0o007
  • stat.S_IXGRP: 组用户有执行权限0o010
  • stat.S_IWGRP: 组用户有写权限0o020
  • stat.S_IRGRP: 组用户有读权限0o040
  • stat.S_IRWXG: 组用户有全部权限(权限掩码)0o070
  • stat.S_IXUSR: 拥有者具有执行权限0o100
  • stat.S_IWUSR: 拥有者具有写权限0o200
  • stat.S_IRUSR: 拥有者具有读权限0o400
  • stat.S_IRWXU: 拥有者有全部权限(权限掩码)0o700
  • stat.S_ISVTX: 目录里文件目录只有拥有者才可删除更改0o1000
  • stat.S_ISGID: 执行此文件其进程有效组为文件所在组0o2000
  • stat.S_ISUID: 执行此文件其进程有效用户为文件所有者0o4000
  • stat.S_IREAD: windows下设为只读
  • stat.S_IWRITE: windows下取消只读

190702 Python 文件权限

在linux系统中,文件的越权访问相对常见,比如普通用户无法访问root用户文件,在python中,可以借助os.access()来判断

1
os.access(path, mode);
  • path: 待检测的路径
  • mode:
    • os.F_OK: 作为access()的mode参数,测试path是否存在。
    • os.R_OK: 包含在access()的mode参数中 , 测试path是否可读。
    • os.W_OK 包含在access()的mode参数中 , 测试path是否可写。
    • os.X_OK 包含在access()的mode参数中 ,测试path是否可执行。

190701 Python 更改工作目录

在用python调用shell脚本时,可以用到功能当前工作目录

1
os.chdir(path)

实例如下

1
2
3
4
5
6
7
8
9
>>> import os
>>> retval = os.getcwd()
>>> print ("当前工作目录为 %s" % retval)
当前工作目录为 /Users/user
>>> os.chdir( '/tmp' )
>>> os.getcwd()
'/private/tmp'
>>> os.getcwd()
'/private/tmp'

190630 Python目录压缩

上一篇介绍了shutil实现文件移动的功能,接下来介绍使用它来实现目录压缩

一个简单的实例case,将/tmp/test目录打包压缩为out.zip

1
2
import shutil
shutil.make_archive("out", "zip", "/tmp/test")

190629 Python目录迁移

在shell里面,直接使用mv命令实现目录文件的移动,那么python中可以怎么做呢?

1
2
3
4
5
6
7
8
9
10
import shutil

def move_dir(source, target):
"""
目录迁移
:param source:
:param target:
:return:
"""
shutil.move(source, target)

190628 Python目录创建

当我们写入数据到一个文件时,假设这个文件所在的某个目录不存在,那么会抛异常,所以我们就需要在目录不存在时创建目录,这个场景比较常见,可以直接借助os来实现

1
2
3
4
5
6
7
8
9
10
import os

def create_dir(path):
"""
目录不存在时,主动创建
:param path:
:return:
"""
if not os.path.exists(path):
os.makedirs(path)

190627 Python文件遍历

如何遍历一个目录下的所有文件?

1
2
3
4
5
6
7
8
9
10
import os

def list_dir(path):
"""
获取目录下所有文件
:param path:
:return:
"""
for file in os.listdir(path):
print(file)

190626 Python文件写

如何将内容保存到文件中?

借助with语句可以简单的实现

1
2
3
4
with open('demo.txt', 'w+') as f:
f.write("hello")
f.write("world")
f.flush()

请注意,上面的write表示一次写入,如果你希望一次写入多个数据,可以使用 writeline

1
2
3
with open('demo.txt', 'w+') as f:
f.writelines(["12", "34"])
f.flush()

190625-Python 文件读取

文件按行读取的两种方式

case1:

1
2
for line in iopen('demo.txt', 'r+'):
print(f)

case2:

1
2
3
with open('demo.txt', 'r+') as f:
for line in f.readlines():
print(line)

190624-python 获取文件大小

记录下在python中获取文件大小的使用方法

1
2
3
4
import os

size = os.path.getsize('/tmp/img/tmp.jpg')
print(size)

输出文件的字节数,单位为B,int型

190623 Python File使用姿势

文件操作,主要借助open函数来实现,定义如下

1
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

对应的参数说明

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型

其中mode采用的参数和c语言的差不多

  • w 写,文件不存在时,创建
  • wb 二进制写
  • r
  • rb 二进制读
  • a 追加写
  • ab 追加写二进制
  • w+ 这个+表示支持读写

190620 Python Input读取数据

raw_input函数读取输入数据

1
2
3
4
>>> str = input("请输入:")
请输入:yhh
>>> print(str)
yhh

190617-python 网络请求之certificate verify failed问题处理

在使用python的request库进行网络访问时,当url是一个https的链接,居然没法正常玩耍,直接提示

1
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1051)>

190715 Python 内置函数之getattr

返回一个对象属性值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> class A:
... a = 1
... b = 2
...
>>> a = A()
>>> getattr(a, 'a')
1
>>> a.a
1
# 获取一个不存在的属性值
>>> getattr(a, 'c')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'c'
# 如果不存在,则返回默认值
>>> getattr(a, 'c', 3)
3

请注意:如果获取属性不存在,且没有设置默认值时,会抛异常

190603-Python 集合的基本操作

在数学中,集合的一些常见操作,比如交集,并集,差集等在python的集合这个数据结构中,能否完美支持呢?

190603 Python 集合内置函数

集合内置的函数介绍

  • add: 添加
  • clear: 清空
  • copy: 拷贝
  • remove/discard: 删除

190525-Python之命令行参数解析getopt使用说明

请求参数解析属于比较常见和基础的操作技能了,如果希望我们的脚本可以在启动时,传入一些参数,来实现不同的环境指定,条件判断等,可以怎么处理呢?

本篇将介绍在python中,如何优雅的使用getopt,来解析我们的命令行参数

190429-Python之获取本机ip地址

环境区分,一种常见的case就是根据ip地址段进行界定,通过给开发环境,测试环境和生成环境映射到不同的ip地址段机器,因此也就有了获取ip地址的需求

190424-Python之16进制与10进制转换

最近正好用到了16进制和十进制之间的互转,发现python相比于java而言,有更优雅的实现方式,下面记录一二

16进制转10进制

1
2
s = '0x12da'
ans = int(s, 16)

10进制转16进制

1
ans = hex(120)

190325 Python 集合常用方法

简单介绍一下集合的一些常用方法

  • len: 个数
  • in: 判断是否存在
  • max: 最大值
  • min: 最小值

190325 Python 集合

集合,最大的特点就是无序、无重复,本文将简单介绍一下集合的基本使用姿势

190323 Python 字典创建方式扩展篇

dict内置方法中,有一个fromkeys,可以用于创建新的字典,以seq序列中的元素作为键,value作为所有键的初始化值

1
dict.fromkeys(seq[,value])

190323 Python 字典内置方法

Python字典提供了一些内置的方法,可以减少大量的操作

  • clear: 清空
  • copy: 拷贝
  • update: 更新
  • setdefault: 不存在时,设置默认值
  • pop: 删除

190323 Python 字典常用函数

python字典中提供了以下几个常用的内置函数,本文分别予以介绍

  • len: 长度
  • str: 转字符串
  • type: 判断类型
  • in: 判断是否包含
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×