Python __ 基础知识点
语言特性
Python是一种跨平台、开源、免费的动态编程语言。
Python 3.X不完全兼容Python 2.X。
-
可以在同一台计算机上安装多个不同的Python解释器版本。
-
高级语言程序要被机器执行,分为编译型和解释型
-
- 编译型(C,C++…)编译型语言是指使用专门的编译器。
-
- 解释型(Python…)指使用专门的编译器将某种高级语言逐行解释成特定平台(操作系统)的机器码并立即执行,可以认为,每次执行解释型语言的程序都需要进行一次编译,因此效率较低且不能脱离解释器(Interpreter),但是跨平台容易,只需要提供每个平台的解释器即可。
-
在Python 3.x中,input()函数把用户的键盘输入作为字符串返回。
-
在GBK和CP936编码中一个汉字需要2个字节;在UTF-8编码中一个汉字需要占用3个字节。
-
Python3.x版本默认的编码集是 UTF-8。
-
- UTF-8是不等长编码。
-
- 能表示全世界所有的文字符号
-
Python程序默认的扩展名是.py
-
python可以在Windows、Mac平台运行,体现出Python的可移植性特性
-
PyCharm是Python集成开发环境。
-
Python语言的官方网站地址是www.python.org
-
计算机存储器的单位是字节(B,Byte),1B等于8位二进制
-
python的特点 :功能强大 语言简洁 免费
-
退出Python解释器可以输入exit() quit() CTRL-Z
-
属于Python应用领域的是操作系统管理 科学计算 WEB应用 服务器运维 的自动化脚本
编程基础
基本语法–注释、标识符、换行、缩进
-
关键字不可以用来作为变量名,函数名,类名等标识符。
-
缩进是体现Python代码逻辑关系的重要方式,同一个代码块必须保证相同的缩进量
-
Python单行注释用井号( # ) 标识
-
Python多行注释使用( ”’ ”’) 标识。
-
printf final 不是python中的关键字
-
Python在利用print()打印数据时,如果数据过长,可以;
若字符串太长,分开两行编写,在首行末尾加续行符“”来实现。
在[ ]中分行时,可以不使用“”,在第二行直接书写数据。
在{ }中分行时,可以不使用“”,在第二行直接书写数据。
在( )中分行时,可以不使用“”,在第二行直接书写数据。 -
打印PYTHON关键字
import keyword
print(keyword.kwlist)
- 分号可把两个语句写在一行比如
x=2;y=2.0
变量与数据类型
-
python的变量会自动改变数据类型,赋予什么类型的数据,变量就自动变成什么类型。
-
当变量内容改变后,变量的内存地址可能改变(id() 函数用于获取对象的内存地址。)
-
Python变量名的定义
-
- 变量由数字、字母、下划线组成
-
- 变量名必须以字母或下划线开头,但以下划线开头的变量在Python中有特殊含义;通常要做到见名知义。
-
- 不能使用关键字作为变量名,要注意的是,随着 Python版本的变化,关键字列表可能会有所变化。
-
- 变量名对英文字母的大小写敏感
-
bool(False) 的返回值是False
bool(‘False’) 的返回值是True。
bool(None)的返回值是False。
bool([])的返回值是False。 -
小数不可以转化为二进制
-
在Python中,不需要事先声明及其类型,直接赋值即可创建任意类型的对象变量。
错误: 关于Python变量的管理,变量无须先创建和赋值而直接使用。
使用是指被调用:如print(t) str(t)
比如t1,t2= map(int,input().split(“,”))
t=str(a) 对于t来时不属于使用,属于被赋值 -
Python中的变量并不直接存储值,而是存储了值的内存地址(引用)。
-
Python 语言本身就支持复数(complex),复数的虚部以j或者J作为后缀
表示复数的语法是real + imag j
实部和虚部都是浮点数
方法conjugate 返回复数的共轭复数
利用其abs()方法得到复数的模 -
type(数据) 可以查看变量的数据类型
print(type(1/2))的输出结果是
<class ‘float’> -
0x开头的数表示十六进制数
print(0xA + 0xB)结果为21 -
可以使用del 变量名 释放资源
-
python没有指针。指针不是python中的数据类型。
-
bool isinstance(参数, 数据类型)
函数用来对参数进行类型检查。
isinstance() 会认为子类是一种父类类型,考虑继承关系。 -
内置的pow(x, y[, z])方法计算 x 的 y 次方,如果 z 在存在,则再对结果进行取模,其结果等效于 pow(x,y) %z。
内置方法会把参数作为整型 -
math 模块的math.pow( x, y ) 此时会把参数转换为 float。
-
转义字符:回车\r 、换行\n
-
每一种Python对象都有一个布尔值,从而可以进行条件测试。下面( )对象的布尔值都为False.
None
False
0
0.0
0.0+0.0j
""
[]
()
{}
运算符和表达式
-
运算符“%” 可以对浮点数进行求余数操作。
-
Python表达式是变量、常量、计算符和方法调用的序列,它执行指定的计算,并返回某个确定的值。
一个数字也是合法的 Python 表达式。 -
逻辑运算and、or、not的运算结果不一定是True或者False
好文章
运算符 | 说明 |
---|---|
x and y布尔”与” | 若 x 为 False,x and y 返回 False,否则返回 y 的计算值 |
x or y 布尔”或” | 若 x 为非 0,则返回 x 的值,否则返回 y 的计算值 |
x not y 布尔”非” | 若 x 为 True,返回 False;若 x 为 False,返回 True |
-
Python使用两个浮点数之间的差异的绝对值小于某个可以接受的值来判断它们是否相等,而不用“==”号来判断2个实数判断其值是否相等。
-
在Python中的关系运算符可以连续使用。如:3<a<4.
-
Python中条件表达式中不允许使用赋值运算符“=”。
-
Python运算符@的功能说明是矩形相乘运算符。
-
python divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。 在python 2.3 版本之前不允许处理复数。
-
pass 不做任何事情,一般用做占位语句
-
Python运算符”-”的功能包括:算术减法,相反数和集合差集
-
逻辑运算符常用来连接条件表达式,( and)和( or)具有逻辑短路(惰性求值)的特点,当连接多个表达式时只计算必须要计算的值。
-
round(18.67, -1))将数据四舍五入到10位
流程控制
分支结构
- 在 if…elif…else 的多分支语句中只会执行一个语句块。
- 关键字elif是用于给 if-else分支语句添加多个条件的
字符串
-
已知x为非空字符串,那么表达式 ”.join(x.split()) == x 的值一定为True。
错误,因为如果字符串包含空格,就会被自动删除 -
在字符串前加字母r或R,表示原始字符串,其中的所有字符都表示原始的含义,而不会进行任何转义。
列表与元组
-
使用Python列表的方法list.insert(index, obj)插入元素时,会改变列表中插入位置之后元素的索引。
-
对于 x=[‘p’,’y’,’t’,’h’,’o’,’n’],y=[1,2,3],经过 x+=y 与 x.append(y) 两种运算, x 的结果不相同。
对于“+”执行结果是两个列表拼接
对于appdend是加入一个类型为列表的元素。 -
在切片操作lst[start,end,step]中,start、end、step三者可同为正、同为负,或正负混合。
-
range、map、zip、filter、reversed、enumerate等迭代对象具有 惰性求值 的特点。
-
使用list()函数把元组、range对象、字符串、字典或其他可迭代对象转换为列表。
-
定义一个元组是必须要有“,” 就算没有括号,只要有逗号就是元组。
就算只有一个元素,也要有逗号 -
元组是轻量级的列表,也可以说是:常量列表。
-
list列表类型的内置方法pop()的作用是:删除指定元素,并返回该元素
-
对列表对象业说,通过切片操作,可以完成的功能有哪些? (增删改查 )
字典与集合
-
集合的每个值必须是不可变类型(可hash,可作为字典的key)
-
元组可以做字典的键,而元组不可以,因为元组不可变,列表可变
-
可以利用内置函数list()、tuple()、dict()、set()、frozenset()把其它类型的数据转换成为列表、元组、字典、可变集合和不可变集合,也可以创建空列表、空元组、空字典和空集合。
-
字典的“键”必须是不可变的。
-
Python字典和集合不支持双向索引。
-
集合的交集、并集、对称差集运算借助于位运算符&、|、^来实现,差集用减号运算符实现。
-
创建一个空的集合只能用set()
-
利用数据创建集合可以使用花括号。
比如{‘1′,’2′,’3’}等同于set(“123”) -
对于两个集合s1和s2,s1 < s2的意思是s1是s2的真子集
-
集合不可以用下表引用
-
把字典对象直接转换成列表(集合)时,默认是把键转换成列表(集合)。
迭代时候,如果不指定,也是默认迭代键
函数
-
函数也是对象,id(func),type(func),func都不会报错。
-
在python中没有方法可以做到:修改形参,就能修改实参。建议的方法是调用函数后赋值?,毕竟python可以return多个参数。
但是对于list这种,因为变量存储的是地址,所以形参改变,实参也会改变。 -
python可以return多个参数
-
定义函数时,函数形参不需要声明其类型,返回值类型也不需要指定。
-
一个变量已在函数外部进行了定义,如果在函数内需要改这个变量的值,
可以在函数内用关键字global明确声明要使用已定义的同名全局变量
。 -
在函数内部使用global定义的全局变量,当函数结束以后仍然存在,并且可以访问。
-
Lambda表达式只可以包含一个表达式,不允许包含其他复杂语句,但在表达式中可以调用其他函数,该表达式的计算结果相当于函数返回值。
-
enumerate ()函数用来枚举可迭代对象,返回可迭代的enumerate对象,其中每个元素都是包含索引和值的( 元组)。
9.globals()函数会以字典类型返回当前位置的全部全局变量。 -
内置函数map用于将指定序列中的所有元素作为参数调用指定函数,返回一个新的序列。
-
函数的return语句,可以以元组tuple的方式返回多个值。
-
定义函数时,在形参前面加一个星号表示可以接收多个位置参数并存放于元组中。
-
定义函数时,在形参前面加两个星号表示可以接收多个关键参数并存放于字典中。
-
任何一个默认值参数右边都不能再出现没有默认值的普通位置参数。
-
lambda 只是一个表达式,能封装有限的逻辑进去。函数体比 def形式定义的函数 简单很多。
-
lambda函数是一个匿名函数。
-
lambda 函数拥有自己的命名空间,不能访问自己参数列表之外或全局命名空间里的参数。
-
在函数中,如果( ),则函数返回空值None。
没有return语句
有return语句但是没有任何返回值
有return语句但是没有执行到
执行了return None语句 -
下面关于生成器函数的描述中,正确的是?
生成器函数的返回值是生成器对象
生成器函数也是使用def关键定义
生成器函数中肯定包含yield语句
模块与包
-
函数用法 random.shuffle()用于将一个列表中的元素打乱顺序,
值得注意的是使用这个方法不会生成新的列表,只是将原列表的次序打乱。 -
Pandas库是Python中用于处理数据的库, Pandas库在数据分析中是非常常用的库。
-
Plotly模块可以画柱状图。
-
第三方模块要先安装才能使用。
-
sqlite3是第三方库, 它可以提供一种轻量级的基于磁盘的数据库,这种数据库不需要独立的服务器进程,也允许需要使用一种非标准的SQL 查询语言来访问它。
-
import math和from math import *不同
后者可以直接调用方法print(sin(3.14))
前者要写math.方法 -
每个Python模块都有__name__属性,在test.py源文件中有一条语句:print(name):
在本模块中它的值是:main
被导入到其他模块中时,它的值是:test -
操作分数,引用库from fractions import Fraction
-
numpy的random.randint不包括最大值,python自带的random.randint包括最大值
面向对象
-
创建对象是通过调用构造方法完成的。
-
在Python类中,构造方法的名称为__init__ 。
-
Python从类定义之外,直接访问实例变量(赋值或取得值)是不好的程序设计风格。
-
在Python中定义类时,如果某个成员名称前有2个下划线则表示是私有成员。(私有方法同理)
-
(错误)Python中,不能利用对象访问类的私有成员。
-
Python允许类的多继承。在多重继承中,如果不同父类存在同名的方法,则按照继承顺序从左到右在父类中搜索方法
-
Python中一切内容都可以称为对象。
-
定义类时,所有实例方法的第一个参数用来表示对象本身,在类的外部通过对象名来调用实例方法时,不需要为该参数传值。
-
对于Python类中的私有成员,可以通过对象名._类名__私有成员名的方式来访问。
-
在Python中定义类时实例方法的第一个参数名称可以任意取,
一般设为self。 -
Python定义类时,在一个方法前面使用@classmethod进行修饰,则该方法属于类方法。
-
Python定义类时,在一个方法前面使用@staticmethod进行修饰,则该方法属于静态方法。
-
在Python中,可以为自定义类的对象动态增加新成员。
-
在类中,具有4个形式参数的方法通常在调用时有不确定个实际参数。(因为可以传入不定量参数)
-
在面向对象程序设计中,将细节隐藏在类定义中,术语称为封装。
-
面向对象程序设计的基本特征:封装继承和多态
-
关于__new__和__init__方法的比较:
new__是一个静态方法,而__init__是一个实例方法
new__方法会返回一个创建的实例,而__init__什么都不返回
只有在__new__返回一个cls的实例时, __init__才能被调用
当创建一个新实例时调用__new,初始化一个实例时用__init
异常
-
在Python中,带有else子句的异常处理结构,如果不发生异常,则执行else子句中的代码。
-
在Python异常处理结构中,不论是否发生异常,finally子句中的代码总是会执行的。
-
当除数为零的时候,会引发ZeroDivisionError异常
-
Python所有内置异常类的基类是BaseException。
-
在Python的异常处理中,一个try语句块允许多个except子句,每个except子句都捕获一种类型的异常。对于具有父、子类关系的异常的排列,谁在前谁先捕获,不在乎父子类。
-
关于try-except-else-finally,异常处理的描述正确的是( )。
异常处理结构也不是万能的 ,处理异常的代码也有引发异常的可能。
except子句可能有多个
文件
-
Python对文件的操作中,read函数返回的是字符串
-
Python对文件的操作中,readlines函数返回的是列表。
-
文件对象的readline( )把文本文件中的每行文本作为一个字符串返回。
-
Python对文件的操作中,close函数用于文件关闭。
-
Python中用“a+”模式打开文件时,文件若不存在,就新一个文件;文件指针在文件末尾,新写入的文件内容是在原来内容的基础上追加写入。
-
Python中用“w+”打开文件时,若文件存在,就清空原文件内容;若不存在,就创建一个新文件,新文件可写、可读。
-
文件对象的tell()方法用来返回文件指针的当前位置。
-
(错误)使用内置函数open()打开文件时,只要文件路径正确就总是可以正确打开的。
操作系统的私有目录等等,就不能访问 -
Python标准库os.path中isdir()方法用来判断指定路径是否为系统已存在的文件夹。
-
Python标准库os.path中isfile()方法用来判断指定文件是否为系统已存在的文件。
-
删除文件的方法:os.remove( filename ) #filename: 要删除的文件名
产生异常的可能原因可能是:文件filename 不存在,或者对filename文件没有操作权限或只读。 -
使用上下文管理关键字with可以自动管理文件对象,不论何种原因结束该关键字中的语句块,都能保证文件被正确关闭。
-
内置函数open()的mode参数指定了打开文件后的处理方式。
mode参数默认是r
-
Python标准库os.path中用来判断指定文件或目录是否存在的方法是exists()。
-
文件读写之后,要调用close()才能确保文件操作的安全性,释放系统资源
-
read(size) 的含义:从文件当前位置开始,读取指定 size 大小的数据。如果 size 为负数或者空,则读取到文件结束。
-
对文件进行写入操作之后,flush() 方法用来在不关闭文件对象的情况下将缓冲区内容写入文件。
-
标准库os库的rmdir(path) 的作用是删除目录path,该目录中不能有文件或子文件夹
-
Python标准库os中用来列出指定文件夹中的文件和子文件夹列表的方式是listdir()。
-
程序代码:os.makedirs( “”C:\123\456\789″”)
调用可能失败,可能的原因是:( )。
os.makedirs() 方法用于递归创建目录。
路径 “C:\123\456\789″已存在
驱动器C:不存在
磁盘C已满
磁盘C是只读的或没有写权限