常见面试题https://www.zhangjunbk.com/article/23397
静态方法https://www.cnblogs.com/Meanwey/p/9788713.html
python中的对象之间的赋值是按引用传送的。
(1)copy()浅拷贝,只拷贝父对象,不会拷贝对象的内部的子对象。
(2)deepcopy()深拷贝,拷贝父对象及其子对象。
#!/usr/bin/python
## -*-f= coding:utf-8 -*-
import copy
origin=[1,2,[3,4]]
cop1=origin #引用
cop2=copy.copy(origin)#浅拷贝
cop3=copy.deepcopy(origin)#深拷贝
origin[2][0]="hey!"
origin[0]="hey!"
print("原来的值:",origin)
print("引用值:",cop1)
print("浅拷贝:",cop2)
print("深拷贝:",cop3)
print("---------------")
print("初始对象地址",id(origin[0]))
print("引用的对象地址",id(cop1[0]))
print("浅拷贝对象地址",id(cop2[0]))
print("深拷贝对象地址",id(cop3[0]))
print("---------------")
print("初始对象地址",id(origin[2][0]))
print("引用的子对象地址",id(cop1[2][0]))
print("浅拷贝子对象地址",id(cop2[2][0]))
print("深拷贝子对象地址",id(cop3[2][0]))
结果为如下:
原来的值: ['hey!', 2, ['hey!', 4]]
引用值: ['hey!', 2, ['hey!', 4]]
浅拷贝: [1, 2, ['hey!', 4]]
深拷贝: [1, 2, [3, 4]]
---------------
初始对象地址 1497843333168
引用的对象地址 1497843333168
浅拷贝对象地址 1497801451824
深拷贝对象地址 1497801451824
---------------
初始对象地址 1497843333168
引用的子对象地址 1497843333168
浅拷贝子对象地址 1497843333168
深拷贝子对象地址 1497801451888
py没有赋值,只有引用。py没有变量,平时说的变量只是标签,即引用。
不可变对象包括int,float,long,str,tuple等
对于不可变类型的变量,如果要更改变量,则会创建一个新值,把变量绑定到新值上,而旧值如果没有被引用就等待垃圾回收。
args表示任意位置参数,* kwargs表示任意个关键字参数
用法:def 函数名(位置参数,args,默认参数,**kwargs),记得arg在kwargs之前
#!/usr/bin/python
## -*-f= coding:utf-8 -*-
def Func(a,b,*args,**kwargs):
print (a)
print (b)
print (args)
print (kwargs)
Func(0,1,2,3,index1=11,index2=22)
输出的结果为:
0
1
(2, 3)
{
'index1': 11, 'index2': 22}
注意(2,3)是因为不定的参数形式把剩下没有关键字的参数形成为一个tuple
,另外后面2个是赋值关系,会变为字典。
单下划线:
(1)变量为保护变量(只有类对象和子类对象可以访问这些变量)
(2)函数为不能直接访问的类属性,要通过类提供的接口来访问
双下划线:
(1)变量为私有成员(只有类对象自己可以访问,子类对象不能访问该成员)
(2)py里的特殊方法专用的标志符,如__ init()__表示类的构造函数
模式 | 作用 | 若文件不存在 | 是否覆盖 |
---|---|---|---|
w | 只写 | 创建 | 是 |
a+ | 可读可写 | 创建 | 否,追加写 |
wb | 只写,以二进制写方式打开 | 创建 | 是 |
其他几个 | |||
r+ | 可读可写 | 报错 | 是 |
w+ | 可读可写 | 创建 | 是 |
a | 只能写 | 创建 | 否,追加写 |
(1)sort是直接应用在list上排序
>>> lst1=[(8,'andy',20),(2,'liu',21),(5,'luo',22)]
>>> lst1.sort()
>>> lst1
[(8, 'andy', 20), (2, 'liu', 21), (5, 'luo', 22)]
(2)sorted可对所有可迭代的对象进行排序,如果对list操作则是产生一个新的列表。
>>> list1=[(8,'andy',20),(2,'liu',21),(5,'luo',22)]
>>> sorted(list1)
[(2, 'liu', 21), (5, 'luo', 22), (8, 'andy', 20)]
>>> list1
[(8, 'andy', 20), (2, 'liu', 21), (5, 'luo', 22)]
https://www.jb51.net/article/158963.htm 这里有2种方法
#!/usr/bin/python
## -*-f= coding:utf-8 -*-
def QuickSort(lst1,i,j):#i左,j为右
if i >= j:
return lst1
pivot = lst1[i]
low = i
high = j
# 划分枢轴
while i < j:
while i < j and lst1[j] >= pivot:
j -= 1
lst1[i]=lst1[j]
while i < j and lst1[i] <=pivot:
i += 1
lst1[j]=lst1[i]
lst1[j] = pivot
QuickSort(lst1,low,i-1)
QuickSort(lst1,i+1,high)
return lst1
if __name__=="__main__":
lst1=[30,24,5,58,18,36,12,42,39]
print("排序前的序列为:")
for i in lst1:
print(i,end =" ")
print("\n排序后的序列为:")
for i in QuickSort(lst1,0,len(lst1)-1):
print(i,end=" ")
注意函数名为驼峰命令,单词开头大写;
注意命名规范:对于局部变量情况,list列表前缀为lst,tuple前缀为t,字典的前缀为d,其他按照开头第一个小写字母,如整型i、浮点型f、字符串s、布尔型b。
输出结果为
排序前的序列为:
30 24 5 58 18 36 12 42 39
排序后的序列为:
5 12 18 24 30 36 39 42 58
格式为isinstance(p,类型),即判断p是否为对应类型。
#!/usr/bin/python
## -*-f= coding:utf-8 -*-
p='123'
print(isinstance(p,str))#判断p是否为字符串类型
断言由assert方法实现,只有成功了程序才继续执行,否则报错。
格式为【assert 表达式,返回数据】,当表达式为false时触发异常,返回数据。
#!/usr/bin/python
## -*-f= coding:utf-8 -*-
try:
n=input("请输入一个数字:")
assert n.isdigit(),"只能输入数字"
print("你输入的是:",n)
except Exception as ex:
print("发现错误:",ex)
结果为:
请输入一个数字:4你输入的是: 4>>> 请输入一个数字:d发现错误: 只能输入数字
#!/usr/bin/python
## -*-f= coding:utf-8 -*-
try:
a=open("testfile","r+")
a.write("该为测试异常的文件")
except IOErrror:
print("Error:没有找到文件或读取文件失败")
else:
print("内容写入文件成功")
a.close()
如果一开始没有testfile文件则会输出:Error:没有找到文件或读取文件失败。
异常处理https://www.runoob.com/python/python-exceptions.html
默认最大次数为1000次,但可以用sys突破:
#!/usr/bin/python
## -*-f= coding:utf-8 -*-
import sys
sys.setrecursionlimit(1500)
def Recursion(n):
if(n<=0):
return
print(n)
Recursion(n-1)
if __name__ =="__main__":
Recursion(1000000)
print从语句变为函数,原 print 1,2+3改为print(1,2+3)
range(0,4)结果是列表[0,1,2,3]改为list(range(0,4))
字符串以8bit字符串存储改为字符串以16bit unicode字符串存储
py2中的utf-8和gbk转换才要2次
GBK编码方式的编码是以中国国情而创造的,在国际上的兼容性不好,这也是为什么大多数的网页是使用UTF-8编码而不是GBK。
py3中默认编码是unicode,而py2中默认编码是ASCII
GBK转码:https://www.cnblogs.com/QZrun220/p/13295041.html