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)

  







posted @ 2018-07-28 15:40  心平万物顺  阅读(207)  评论(0编辑  收藏  举报