Python3常用系统函数JSON帅哥定制版
没错,这里的帅哥指的就是我自己
安装
安装pip3
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26
tar -zxvf setuptools-19.6.tar.gz
cd setuptools-19.6.tar.gz
python3 setup.py build
python3 setup.py install
mac下可以直接使用homebrew,安装Python3同时会自动帮你安装 pip3
brew install python3
使用必读
不可变数据(四个):Number(数字)、String(字符串)、Tuple(元组)、Sets(集合);
可变数据(两个):List(列表)、Dictionary(字典)。
不可变对象,
该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,
相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。
可变对象,
该对象所指向的内存中的值可以被改变。
变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,
并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。
数值类型(int和float)、字符串str、元组tuple都是不可变类型。而列表list、字典dict、集合set是可变类型。
先说明一点is 就是判断两个对象的id是否相同, 而 == 判断的则是内容是否相同。
id() 函数用于获取对象的内存地址。
具体这块的测试,可以使用id(变量)来获取对象的内存地址,来做测试
上面我们讲了,str是不变对象,而list是可变对象。
对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,比如:
>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']
而对于不可变对象,比如str,对str进行操作呢:
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'
虽然字符串有个replace()方法,也确实变出了'Abc',但变量a最后仍是'abc',
Python3头文件
# coding=utf-8
# coding:utf8
# -*- coding: utf-8 -*-
杂项
__author__ 变量__author__='liu'把代码作者写进去,公开代码的时候给别人看, 和程序运行没有关系
__name__ 程序通过自身运行时返回"__main__"
__file__ 返回脚本的路径,必须是实际存在的.py文件
__name__ 当文件被直接运行时输出字符串__main__,如果是被调用执行则会输出自身的文件名
with...as 对资源进行访问的场合如open,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,同时可以as 一个别名
input() 获取用户输入内容类似PHP的STDIN
print() 输出
pass 不做任何事,一般作为占位符使用,后面的代码也不会执行
三元运算符 Python没有三元运算符,但是可以这样写,True if 2>1 else False;2>1则为True否则False
不定参数/可变参数
函数接收处理任意个数量的参数。
可变参数有两种形式*args和**args
*args就像普通的传参一样,同时传入函数 内部后变成列表
**args必须要以K1=V1,K2=V2的形式传入,同时传入函数内部后变成字典
案例:
def args1(arg,*args):
print(arg)
print(args)
args1('参数1','参数2','参数3','参数4')
def args2(arg,**args):
print(arg)
print(args)
# 这里的key不能有引号
args2('参数1',参数2='2',参数3='3',参数4='4')
系统内置函数
lambda 关键字,创建匿名函数表达式,如:lambda x:x*2,range(10),:前的是参数,后面是函数体
多个参数时用,隔开.匿名函数没有return返回值,返回值就是:后面的处理结果
filter() 将列表中的每一个元素传入函数/匿名函数,保留返回true的,放弃返回false的
结果要转成list需要用list()包裹,下面是一个利用filter和lambda的求奇的案例
list(filter(lambda x:True if x%2 else False, range(10)))
map() 将列表传入的函数依次作用到列表的每个元素,并把结果作为新的值返回
Python3中我的3.6,结果不能直接使用list()转换为为list否则会报错,需要遍历
reduce() 将list/dict/tuple等的第一个元素和第二个元素传入指定的函数进行处理,
将得到的结果和第三个参数传入指定函数,再将得到的结果传入指定函数,以此类推.
注意reduce()调用的函数,必须有两个形参.
Python3中reduce()已经放在了functools中需要,from functools import reduce
isinstance() 判断一个变量是不是指定的类型
#coding=utf-8
# builtin_function.py 内置函数
import os
def fun():
all([True, False]) # 迭代器(为空or)所有元素为true,返回true => False
any([True, False]) # 迭代器任意一个元素为true,返回true => True
num = abs(-1.23) # 绝对值
num = pow(5, 3) # 幂次方 x**y =>125
num = pow(5, 3, 3) # 幂次方再取余 (x**y) % z => 2
num = round(1.23) # 返回浮点数近似值,默认保留0位,且四舍五入
num = round(1.23, 5) # 5为保留小数点后位数
num = sum([1, 2, 3, 4, 5]) # 对列表数字求和
strs = ascii(os) # 返回对象的ascii字符串形式
strs = bin(123) # 整数转为二进制字符串(若被转对象非int类型可在__index__里定义)
boolean = bool(0) # 获取真假(假:None / False / 任何类型的0 / 空""()[]{} / __bool__返回False / __len__返回0)
bytes = bytearray("You were, are and will be in my heart!", "utf-8") # 字符串(字符串,编码):按编码转为字节序列 / 数字(数字):生成相应大小的空数组 / 无参():0数组
bytes = bytes("You were, are and will be in my heart!", "utf-8") # 同bytearray(),但是不可变
strs = chr(123) # 整数(Unicode)转为char类型(范围[0, 1 114 111])
num = ord("{") # char类型转为整数(Unicode)
num = complex("1+2j") # 将字符串或数字转为复数(不能含有空格)
num = float('1.1') # 构建浮点数
strs = format(123,'f') # 格式化(类型:x,b,f... / 位移:>(>10),
strs = hex(123) # 将整数转为16进制字符串
strs = oct(123) # 十进制转成8进制字符串
num = int(123.1) # 转为整数
strs = str(123) # 将对象转为字符串
strs = str(b"123", "utf-8")
elem = max([1,2,3,4], [2,4,6]) # 可接收1个iterable,或多个元素 => [2, 4, 6]
elem = max(1,2,3,4) # => 4
elem = max([1,2,3,4, 6], key = lambda x : x == 2) # => 2
elem = min(1,2,3,4) # 与max相反
exe = compile("print('O_O')", filename = 'strs', mode='exec') # 编译为代码, mode(编译模式:可执行语句'exec',单个语句'eval',交互式语句'single')
exec(exe) # 执行已编译代码
exec("print('O_O')") # 执行String未编译代码
eval(compile("print('O_O')", filename = 'strs', mode='eval')) # 不接受字符串类型
delattr(Clazz("Hello!"), "name") # 删除某对象属性 = del clazz.name 详情见 类 文章的 反射 代码块(http://www.jb51.net/article/128897.htm)
setattr(Clazz("Hello!"), "name", "World!") # 给对象某属性赋值
strs = getattr(Clazz("Hello!"), "name") # 获取某个对象的属性值
strs = getattr(Clazz("Hello!"), "name", -1) # -1为未找到属性的返回
boolean = hasattr(Clazz("Hello!"), "name") # 该对象是否有该属性
lists = dir(Clazz("Hello!")) # 查看函数
clazz = type(os) # 获取类型
dicts = globals() # 获取当前全局函数与对象
dicts = locals() # 获取当前局部函数与对象
dicts = vars() # 同locals() (__dict__)
dicts = vars(Clazz("Hello!"))
num = hash(Clazz("Hello!")) # 获取某对象的hash值
help(os) # 获取某对象的帮助文档
num = id(os) # 获取某对象的id
boolean = isinstance(Clazz("Hello!"), Clazz) # 对象是否是该类的实例
boolean = issubclass(Clazz, Clazz) # 该类(前)是否是该类(后)的子类(包括自己)
strs = repr(os) # 将对象转为字符串表达形式
# - super() # 代理父类对象,详情见 类 文章(http://www.jb51.net/article/88315.htm)
# - memoryview(obj) # 内存视图,详解 数据结构 文章(http://www.jb51.net/article/128892.htm)
dics = dict() # 创建字典
tups = divmod(10, 5) # 返回元组,(商(10/5),余数(10%5))
lists = enumerate(['a', 'b', 'c']) # 返回枚举对象
lists = filter(lambda x: True if (ord(x) > 66) else False, ['a', 'b', 'c']) # function为Frue保留,False移除
sets = frozenset([1, 2, 3]) # 返回新的frozenset对象(集合)
num = len([1, 2, 3]) # 长度
list