常见的类型问题
1、False(布尔类型)所有的值为零的数,对于所有为零的数都可以用boolean 验证
0(整型) 0.0(浮点型) 0L(长整型) 0.0+0.0j(复数) “”(空字符串) ()(空元组){}(空字典)
2、深拷贝和浅拷贝
a = [1, 2, 3, 4, ['a', 'b']]
b = a # 引用,除非直接给a重新赋值,否则a变则b变,b变则a变
c = copy.copy(a) # 浅复制,只会拷贝父对象, 不会拷贝父对象中的子对象,所以若a的子对象变则c 变,但是父对象变c不会变
d = copy.deepcopy(a) #深拷贝,完全拷贝,完全独立于原对象,a变也不变
a.append(5) # 改变父对象
a[4].append('c') #改变父对象中的 ['a', 'b']子对象
1
2
3
4
5
6
3、init 和 new
__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。
__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。
1
2
即,new在init之前被调用,new的返回值(实例)将传递给init方法的第一个参数,然后init给这个实例设置一些参数。
4、解释性语言和编译性语言的定义:
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。
解释性语言的定义:
解释性语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。
现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行。
编译性语言的定义:
编译性语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
5、-foo、–foo、 –foo– 区别
_xxx 不能用’from module import *’导入 (相当于protected) 只有类对象和子类对象自己能访问到这些变量, 在模块或类外不可以使用
__xxx 类中的私有变量名 (privated),只有类对象自己能访问,连子类对象也不能访问到这个数据所以更加不能使用from module import进行导入了。
–xxx–系统定义名字 (系统内置的,比如关键字)
6、字母与数字的ASCII 码大小范围是 “a-z” > “A-Z” > “0-9
python 一些函数运用
1、ceil 、floor 、round 函数在python 3.6 版本
import math
a = 3.45
print(math.ceil(a)) 结果是4
print(math.floor(a)) 结果是3
print(round(a)) 结果是3
1
2
3
4
5
2、isinstance 函数用法:当我们定义一个class的时候,我们实际上就定义了一种数据类型。我们定义的数据类型和Python自带的数据类型,比如str、list、dict没什么两样:
判断一个变量是否是某个类型可以用isinstance()判断:
class Student():
def __init__(self, name, score):
self.name = name
self.score = score
a = '10'
b = 3
c = [1, 2, 3]
d = (1, 2, 3)
f = Student('Eden', 99.9)
print(isinstance(a, str)) # True
print(isinstance(b, int)) # True
print(isinstance(c, list)) # True
print(isinstance(d, tuple)) # True
print(isinstance(f, Student)) # True
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
3 、python assert 断言的作用
python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。
assert 1==1
assert 2+2==2*2
assert len(['my boy',12])<10
assert range(4)==[0,1,2,3]
assert expression
等价于
if not expression:
raise AssertionError
1
2
3
4
5
6
7
8
9
assert的异常参数,其实就是在断言表达式后添加字符串信息,用来解释断言并更好的知道是哪里出了问题。格式如下:
assert expression [, arguments]
assert 表达式 [, 参数]
assert len(lists) >=5,'列表元素个数小于5'
assert 2==1,'2不等于1'
1
2
3
4
4、list[: -1 :]、list[: : -1]、list[-1 : ;]三者的区别?
如: a = [1, 2, 3, 4, 5, 6, 7, 8 ]
三个参数分别代表开始索引、结束索引和步长值。位于前两个参数时,-1表示list最后一个值的索引(此例值为8);位于第三个参数时,-1表示从右向左一个一个取数。第一个参数为空时,代表索引从0开始,第二个参数为空时,表示取开始索引之后的全部值,等价于len(list)(此例值为9)
举例说明一下
a = [1, 2, 3, 4, 5, 6, 7, 8 ]
print(a) ##结果为 [0 1 2 3 4 5 6 7 8]
print(a[::-1]) ##结果为 [8 7 6 5 4 3 2 1 0]
print(a[-1::]) ##结果为 [8]
print(a[:-1:]) ##结果为 [0 1 2 3 4 5 6 7]
1
2
3
4
5
5、readlines()函数,readlines()每读取一行文件,都会自动加上’\n’(换行符),所以如果你读取5000行数据,假设没有在你的最后一行加上一个空行,你很可能会遇到读取的数据只有4999句,因此我们在代码中一般会用一个strip()清除空行字符。
例如:下面是一段把文本句子按照长度分类之后,写出来的例子
def sort_sentence(path_in, path_out): ###
with open(path_in, 'r', encoding="utf8") as file_in, open(path_out, 'w', encoding="utf8") as file_out:
lines = file_in.readlines()
lines.sort(key = lambda line: len(line))
for line in lines:
line = line.strip() ### 清除空行
file_out.write(line + '\n') ### 按行写数据
1
2
3
4
5
6
7
6. if list:的判断问题
python 在判断一个list类型的数据内容是否为空,可以使用 if list:来判别,如果list 为空 ,返回一个False, 反之,不为空,返回的是一个True。
其实这种判断方法等价于; if len(list) > 0 :
---------------------
【转载】仅作分享,侵删
作者:凌疯墨子
原文:https://blog.csdn.net/ANNILingMo/article/details/80295351
|
|