Python学习视频的笔记-----基础

1.1 Python对象模型

对象是python语言中的基本概念
内置对象可直接使用
数字:没有大小限制,支持复数运算
int 整数:
十进制整数
十六进制 必须0x开头
八进制 必须0o开头
二进制 必须0b开头

float 浮点数
1.2e2科学计数

complex 复数
a = 3+4j
b = 5+6j
a.real 查看复数实部
a.imag 查看复数虚部
a.conjugate() 返回共轭复数

字符串:引号之间可以互相嵌套
''
""
''' ''' 
三引号用于比较长的注释
字符串连接 a=‘abc’+’123’ 生成新对象
字符串格式化 a= 3.6674
‘%7.3f’ %a
“%d:%c”%(65,65)内容与格式数量顺序还得一致
\b 
\\
 \'
 \''
 \ooo 3位八进制字符
\xhh  2位十六机制字符
\uhhhh 4位十六进制unicode码
\f  
\n
\r
\t
\v

r’’原始字符串不转译 R也可以
字节串:
bytes b’hello world’
列表:[‘a’,’b’]
字典:{1:’a’} 键 值 
元祖:(2,1,3),(3,) 注意:元祖只有一个元素,后面的逗号不可以省略

元祖和列表区别:元祖不可变,可hash
元祖可以作为字典的键

集合:元素不允许重复
setfrozenset  元素不可变
{‘a’,’b’,’c'}
set 元素可变

布尔:bool
True False

空类型:NoneType
None 空值

异常: Exception ValueError TypeError

文件:f = open(‘data’,‘rb’)使用指定模式打开文件
其他迭代对象:
惰性求值特点,已经访问过的元素不可二次访问
eg:
zip将两个值压缩成元祖 当访问之后不可再次访问
>>> zip
<class 'zip'>
>>> r=zip('adfad','12341')
>>> r
<zip object at 0x114477788>
>>> ('a','1') in r
True
>>> ('a','1') in r
False
>>>

编程单元
函数(使用def 定义)、类使用class定义 模块类型为module 
类和函数属于可调用对象,模块来集中存放这些对象
非内置对象需要导入模块使用


1.2Python变量

x = 3
x = ‘2’
Python 属于强类型编程语言,python解释器会根据赋值语句或者运算来自动推算类型
动态类型语言

推断变量类型 : isinstance(‘3’,int) 判断变量或者常量是否是一个类型的实例

变量在赋值运算符或复合复制预算赋左边表示常见变量或修改变量的值否则是引用该变量

字符串和元祖属于不可变序列,不能元素重新赋值
python 允许多个变量指向同一个值
python 不是存储值而是指向值
python修改值的时候其内存地址会改变,而另一个变量不会改变

python内存管理方式:
如果为不同变量赋值相同,这个值内存中只有一份多个变量指向同一快内存地址
>>> list=[1,1,1,1]
>>> id(list[0])==id(list[1])
True
自动内存管理,跟踪所有值,自动删除不在有变量指向的值
显示使用del命令删除不需要的值或显示关闭不在需要访问的资源。

定义变量的时候:
字母或下划线开头,但是下划线有特殊含义
不能使用关键字
不建议使用系统内置模块名,以及已经导入的模块名
可以通过dir(__builtins__)查看
>>> x=3
>>> id(x)
4305324480
>>> id=10
>>> id(x)
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    id(x)
TypeError: 'int' object is not callable
 
+ 算术加法,列表、元祖、字符串合并
- 算术减法,集合差集,相反数
* 序列重复 list*3
/ 真除法
// 求整数,如果5.0//3 得到1.0
% 求余,字符格式化
<、>、==、!= 集合和集合之间的关系运算
or 逻辑或
and  逻辑与
not 逻辑非
in 成员测试
is 对象同一性测试,测试是否为同一对象或内存地址是否相同,如果同一个对象,对一个进行修改可能会影响另一个
|,^,&,<<.>>,~ 按位运算
&,| 集合交集、并集、对称差集
@ 矩阵相乘运算符,numpy模块科学计算

  • 关系运算符可以连用:1<2<3
  • 集合比较是可以比较是不是子集
  • range(a,b,c)  包含a不包含b在此区间内, 步长为1
  • x = [1,2,3] ,y = [1,2,3] x is y 为false 
  • {1,2,3}^{3,4,5} 对称差集
  • 3 and 5 返回最后一个表达式的值作为整个表达式的值

>>> x = 3,5
>>> x
(3, 5)

逗号不是运算符,只是分隔符


1.3 常用内置函数


abs 返回数字绝对值,复数的模
all(iterable) 如果所有元素都等价于True,空也返回True
any(iterable) 只要有true 返回true 空的迭代对象也返回true
ascii(obj) 把对象转化成ascii码
bin 整数转2进制
bool 返回与x等价的布尔值 True False
bytes(x) 生成字节串,或把对象x转换成字节串
callable(obj) 测试对象obj是否可以调用,包含__call__方法的类的对象也是可以调用的
compile() 用于把python代码编译成可悲exec()或eval()函数执行的代码对象
complex(real,[imag]) 返回复数
chr(x) 返回unicode编码为x的字符
ord(x) 返回一个字符x的Unicode编码
hex(x) 转16进制
delattr(obj,name) 删除属性,等价于del obj.name
dir(obj) 返回指定对象或模块的成员列表,如果不带参数,返回当前作用域内所有的表示符
divmod(x,y) 返回包含整商和余数的元祖((x-x%y)/y,x%y)
enumerate(iterable[,start]) 枚举iterable中所有的元素,返回元素的位置和值的元祖
eval(s[,globals[,locals ]]) 计算并返回字符串s中表达式的值
exec(x) 执行代码或代码对象x
exit() 推出当前解释器环境
filter(func,seq) 返回filter对象,其中包含序列seq中使得单参数函数func返回值为True的那些元素,如果函数func为None则返回包含seq中等价于True的元素的filter对象----把一个函数左右到一个序列上或者迭代对象上,函数必须是单参数函数,seq中每个元素作为参数去func执行,返回true则留下
float 把蒸熟或字符串x转换为浮点数并返回
frozenset([x]) 创建不可变字典对象
getattr(obj,name[,default]) 获取对像中指定属性的值,==>obj.name
globals() 返回当前作用域内全局变量及其值的字典
hash(x) 返回对象x的哈希值,如果x不可hash则抛出异常
help(obj) 返回对象的帮助信息
id(obj) 返回对象的内存地址
input(['提示']) 显示提示,接受键盘输入内容,返回的是字符串
isinstance(obj,class-or-type-or-tuple) 测试对象obj是否属于指定类型,如果多个类型,需要放到元祖中
iter(..) 返回指定对象的可迭代对象
len(obj) 返回obj中包含的元素个数
list([x]),set([x])
tuple([x]),dict([x])
对象x转换
无参数,创建空的
locals() 返回当前作用域内局部变量及其值的字典
map(func,*iterables) 把函数作用到序列上,返回map对象,对象的元素是函数的返回结果
max(x),min(x) 返回可迭代对象x中的最大值,最小值,要求x中的所有元素之间可比较大小,允许指定排序规则和x为空时返回的默认值
next(iterator,[,default]) 返回可迭代对象中的下一个元素,允许指定迭代对象结束后继续迭代返回的默认值
oct(x) 把整数x转换为八进制串
open(name[,mode])
以指定模式mode 打开文件name 并返回文件对象
打开不成功时,
pow(x,y,z) 返回x的y次方,x ** y % z
print(value,...,sep=' ', end='\n',file=sys.stdout,flush=False) 基本输出函数
quit() 退出当前解释器 
range([start,]end[,step]) 返回range对象左闭右开区间步长step
reduce(func,sequence[,initial])
python2内置,python3需要from functools导入
将双参数的函数func以迭代的方式从左到右依次应用到序列seq中每个元素,最终返回单个值作为结果,
迭代-----第一次时,双参数为序列中的前两个元素,第二次,将第一次的结果作为第一个参数,第二个参数为序列第二个元素
repr(obj) 返回对象obk的规范化字符串表示形式,对于大多数对象,eval(repr(obj))==obj,类似print显示对象的值
reserveed(seq) 返回新的迭代器对象
round(x [,小数位数]) 四舍五入
sorted(iterable,key=None,resrve=False)
False升序 True降序
key可以时lambd表达式
str(obj) 对象转化字符串
sum(x,start=0)
求和
如果x为列表,把start=[],返回start+sum(x)
>>> sum([['a','b','c','d'],['b']],[])
['a', 'b', 'c', 'd', 'b']
可以这么玩
type(obj) 返回对象类型
zip(seq[,seq2])
返回zip对象
最终结果中包含的元素个数取最短的
zip对象为 (seq[0],seq2[0]),(seq[1],seq2[1])
eval(str([1,2,3,4]))
python2 sum(a)*1.0/4 
python3 sum(a)/4

字典是无序的,是维护了一个hash表 

reduce函数

reduce(func(a,b),seq)

func为双参数函数

假设seq有5个元素,

第一次为 func(seq[0],seq[1])

第二次为 func(func(seq[0],seq[1]),seq[2])

第三次为 func(func(func(seq[0],seq[1]),seq[2]),seq[3])

...

直到序列下一个元素为空

即除了第一次,接下来的执行都是,以上一次函数执行的结果为第一个参数,当前迭代元素为第二个参数,运行func

>>> from functools import reduce
>>> seq=list([range(0,10)])
>>> reduce(lambda x,y:x+y,seq)
range(0, 10)
#这块脑回路比较轻奇
>>> seq
[range(0, 10)]
>>> seq=list(range(1,10))
>>> reduce(lambda x,y:x+y,seq)
45
>>> 



filter()将一个单参数的函数作用到一个序列上,回归该序列中使得该函数返回值为True的元素

range([start,]end[,step]) start 默认为0,step默认为1

zip(seq1,seq2)

两个序列左对齐,从左往右,返回多个元祖,

每个元祖的两个元素就是序列1和序列2的元素值,拉到其中一个序列没有值,停止

1.4 对象的删除

del只是删除对象和值之间的引用关系,如果删除引用后,该值没有被其他变量引用,则删除该值

del我命令无法删除元祖或字符串中的元素,只可以删除整个元祖和字符串,因为元祖和字符串属于不可变序列

1.5基本输入输出

x=input("please input:")

python2 使用输出界定符来确定输入的类型。

input:3

type为int

input:'3'

type为str

input::'[1,2,3]'

type为list

python3 一律作为字符串返回赋值给变量


输出:python2 print 'dd' 

输出到文件

=======python2========

fp = open(r'dd.txt','a+')

print >>fp,"helloworld"

fp.close

========python3========

fp = open(r'dd.txt','a+')

print('helloworld',file = fp)

fp.close

输出换行问题

=========python2=======

print i,

=========python2=======

print('',end=' ')


1.6模块的导入和使用

import 模块名

import sys

sys.modules.items

from 模块名 import 对象名 [as 别名]

from math import sin as sinfunc

from math import * 不推荐使用


在2中可以使用reload函数重新导入一个模块,在3中需要使用imp模块导入reload函数


python首先会在当前目录中查找需要导入的模块,如果没有找到则从sys模块的path变量中查找

>>>sys.path

['', '/Users/jinshengkai/Documents', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']

导入模块时,优先导入相应的pyc文件,如果pyc文件与py文件时间不相符,则导入py文件重新编译该模块

可以使用sys.path.append(r'')导入文件夹

如果需要导入多个模块

导入顺序:

1.标准库

2.成熟的第三方扩展库

3.自己开发的库

猜你喜欢

转载自blog.csdn.net/weixin_40245633/article/details/79878216