python 常见基础知识总结

常见的类型问题

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']子对象

3、initnew

__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。
__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。

即,newinit之前被调用,new的返回值(实例)将传递给init方法的第一个参数,然后init给这个实例设置一些参数。

4、解释性语言和编译性语言的定义:

计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。
解释性语言的定义:
解释性语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。
现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行。
编译性语言的定义:
编译性语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。

5、-foo、–foo、 –foo– 区别

  1. _xxx 不能用’from module import *’导入 (相当于protected) 只有类对象和子类对象自己能访问到这些变量, 在模块或类外不可以使用
  2. __xxx 类中的私有变量名 (privated),只有类对象自己能访问,连子类对象也不能访问到这个数据所以更加不能使用from module import进行导入了。
  3. –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 

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

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

assert的异常参数,其实就是在断言表达式后添加字符串信息,用来解释断言并更好的知道是哪里出了问题。格式如下:

    assert expression [, arguments]
    assert 表达式 [, 参数]
    assert len(lists) >=5,'列表元素个数小于5'
    assert 2==1,'2不等于1'

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]

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')         ### 按行写数据

6. if list:的判断问题

python 在判断一个list类型的数据内容是否为空,可以使用 if list:来判别,如果list 为空 ,返回一个False, 反之,不为空,返回的是一个True。
其实这种判断方法等价于; if len(list) > 0 :

你可能感兴趣的:(python)