Python基础
开发语言:
高级语言:Python、Java、PHP、 C#、Go、ruby、C++:写英文,软件转给C语言再化为0101位交给操作系统
低级语言:C、汇编
机器码和字节码
机器码:0101系统能识别的,低级语言转换字节码成机器码
字节码:高级语言内部转换的语言
语言之间的对比:
高级语言开发效率高,都要用到低级语言
低级语言执行效率高,涉及内存控制
php适合网页,python和java网页后台,但python开发效率高,执行效率低了点
Python种类
通常的python是cpython,直接转c
也有基于java和c#开发的Jpython和C#python,转换位对应语言,再转为c语言,但与java等交互性好
JPython
IronPython
JavaScriptPython
RubyPython
....
pypy python开发的python,先内部执行一下拿到字节码对应的机器码,以后再执行机器码即可
一、运算规则:
有括号先算括号,没有括号从左到右
二、数据类型
1.数字 int
python2:int long
python3: int
方法:
- int():转为数字
- int(,base=16):以16进制的形式转为10进制
- big_lenght:二进制的有效位数
2.字符串 str
方法:
- capitalize():首字母大写 - casefold():小写,除英文外还支持更多的语言对应 - lower():小写,islower() - upper():大写,isupper() - center(width,fillchar=None):一共多长,中间是字符串,其余填充指定的一个符号 - ljust(width):字符串开头,后面填充指定符号 - rjust():字符串结尾,开头填充 - count(sub,start=None,end=None):计算出现的次数,能指定开始和结束位置 - encode() - decode() - endswith(sub):以什么结尾,返回布尔值 - startswith():开头 - expandtabs(8):以括号中数字为一组长度,遇到\t就空白补充,'asdd\tasd\tas' - find():找到子序列的开始位置,未找到-1 - format():格式化,将{name}替换为指定值(name='ss'),占位符是数字{0}时顺序替换(v1,v2) - format_map():传字典,v="i am {name},{abc}" v.format_map({"name":'ss',"abc":"sa"}) - index():找到子序列的开始位置,未找到报错 - isalnum():是否只包含字母和数字 - isalpha():是否字母,汉字 - isdecimal():是否十进制 - isdigit():不同格式的数字,②,不支持中文 - isnumeric():支持中文 - isidentifier():返回bool,是否是标识符,字母、数字、下划线组成,不以数字开头 - isprintable():是否不存在不可显示的字符\n \t - isspace():是否全部是空格 - title():每个单词首字母大写,衍生 istitle() - join():示例:" ".join('abc')返回"a b c"。join前是填充符,后面是要被填充的字符串,每一个元素之间用填充符并接 - strip():移除两边空格\n和\t,可以指定移除字符或字符串(一个个匹配,有则移除)。衍生:lstrip() rstrip() - maketrans('',''):指定替换关系 - translate(m):按照括号内的替换关系进行替换 - partition():按照括号内的元素,分割一次,元组,三个元素,第二个是本身 - rpartition():从右边开始分割 - split('',num):分割,能传最多分割次数,没有自身,列表 - rsplit() - splitlines(bool):根据换行进行分割,True时保留\n - swapacse():大小写切换 - replace('','',num):替换,能传次数
下标:
test[0:1] 不包括1
-1:最后位置
range(100):
python2中会打印出来,要用xrange()
python3中只创建内存对象,for循环才会创建
range(0,100,5) 还能指定步长,也支持负数range(100,0,-1)
len():
python3中:字符长度
python2中:字节长度
注意点:
a.字符串一旦创建不可修改,修改就会重新创建字符串。原因是内存连续,修改会存在字节位数不同的问题
3.布尔值 bool
True False
转换:bool()
注:在JavaScript中小写 true false
假:"" None () [] {} 0
4.列表 list
特征:- 列表元素可以是数字,字符串,列表,布尔值,所有都能放
- 切片取到的是列表
- 列表可以修改,内存不连续,链表,存有下一块的地址
- 删除:del li[0]
- 切片修改:li[1:3]=[]
- 切片删除:del li[1:3]
- in
转换:list('asd') 默认每一个字符是一个元素
"".join(li),li必须全是字符串
方法:
- append():追加元素 li.append(2) - clear():清空,原列表变成[] li.clear() - copy():浅拷贝,返回一个列表,需要值接收一下 v=li.copy() - count():计算出现个数 v = li.count(11) - extend():循环括号内每个元素追加到列表,可迭代对象,如字符串、列表、元组 li.extend([22,21]) - index():找到第一个位置 - insert():指定位置插入,li.insert(0,11) - pop():删除最后一个,可以指定位置,返回删除值 - remove():根据值删除列表元素,第一个 - reverse():反转 - sort():排序,reverse=True时从大到小排
5.元组 tuple
特征:
- 元素不可被修改、删除或者增加,但元素的元素比如列表元素可以操作
- 有序
- 写元组时,推荐最后加逗号,区分方法不能加逗号
- 索引[],切片(返回元组)
转换:
- tuple():可以转换字符串、列表为元组
- list():元组转换为列表
- "".join():转为字符串,要求元素全是字符串
方法:
- count()
- index()
6.字典 dict
特征:
- 键值对,无序
- 字典的key:不能是列表和字典,因为字典保存用到哈希,键要转为数字
- temp = dict时,temp指向dict的内存地址,修改temp的值,dict的值也随之改变
删除:del pop('k1')
方法:
- keys():键,默认 - values():值 - items():键,值 - get():没有会返回None,或者传入默认值 - pop('k1'):删除,返回删除的value,能传入默认值 - popitem():随机删除,返回键值对元组 - update():没有就设置,有就更新。传字典,或者(k1=11,k3=22) - clear() - copy() - dict.formkeys():静态方法,类+方法(),第一个参数是key,如果可迭代循环拿,第二个是值 - setdefault('k1','v1'):没有就设置,有则不设置,返回value
三、全局变量和局部变量
函数内的变量为局部变量,编译时遇到函数不执行内部。
如果没有局部变量,自动读取全局变量,(若进行赋值=会创建局部变量),如果可变类型,可以操作内部元素append等
global:声明变量
即可进行赋值=,改变全局变量
如果先创建局部变量,又声明了global,会报错,不知道找谁
规则:全局变量名大写
局部变量名小写
nonlocal:上一级函数的变量,如果外层没有函数,报错。
四、类和方法
静态字段\属性属于类,在程序加载时创建放在内存,只一份
类属性属于对象,创建对象时__init__创建
def __init__(self,*args,**kwargs):
# super会拷贝所有的静态字段user等,赋值给self.fields,否则self.fields为空
super(FM,self).__init__(*args,**kwargs)
self.fields['user_type'].choices = models.UserType.objects.values_list('id','caption')
五、python常用方法
1.map()
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
map(function, iterable, ...)
2.lambda
3.zip()
用法一
a=[1,2,3] b=[11,22,33]
list(zip(a,b))=[(1,11),(2,22),(3,33)]
用法二
a = [(1,2,3),(11,22,33)]
list(zip(*a))=[(1,11),(2,22),(3,33)]
六、
def func(arg,li=[]): #代码解析时,li已经创建,开辟了内存 li.append(arg) return li v1 = func(1) print(v1) v2 = func(2,[]) #新开辟了内存 print(v2) v3 = func(3) print(v3)
n1=[1,2,3,4,5] n2 = n1 #两者指向同一个内存 n3 = n1[:] #切片,重新复制一份 n1[0]=666 n3[1]=999 print(n1) print(n2) print(n3)
七、python类的继承
class A: def a(self): self.b() def b(self): print('11') class B(A): def b(self): print('22') obj = B() obj.a() #先去B中找a方法,没有去A找,执行self.b(),其中的self还是指B对象,再看看B有没有再去继承类找
即继承的类的方法会被覆盖
八、导入
from src.plugins import base
# 加载文件夹下的base.py文件
from src import plugins # 或者from .plugins import pack(__init__文件中的方法)
# 默认会导入__init__文件,
data_dict = plugins.pack() # pack()
九、强类型语言与弱类型语言
强类型语言指运行前先所有编译一遍
弱类型语言指边解释边编译
十、线程池
from concurrent.futures import ThreadPoolExecutor pool = ThreadPoolExecutor(5) pool.submit(task,i)
11、加密
import hashlib app_id = 'asdasdadsd' m = hashlib.md5() m.update(bytes(app_id,encoding='utf-8')) authkey = m.hexdigest() print(authkey)