python学习笔记二

python 3 中默认为使用utf-8编码方式,但是python 2则使用ASCII。

'''  '''  可以用来多行注释,也可以用来写多行字符串。

Input()函数

在python 2.x中有raw_input() 和 input() 两种输入,在python 3.x中把raw_input() 和 input()整合成了一个函数,

就是input()函数。

python 3.x 中 ,input()接受任意的输入,默认为字符串处理,并返回字符串类型。

在 2.x的input()在输入时必须原样输入,如果想输入字符串asdfg,就必须输入“asdfg"。(方法鸡肋)

 

python的分为标准库和第三方库。可以直接导入的库是标准库,而第三方库必须要下载安装才可以用。

标准库例如sys,os等。

记录两个os中的函数: 

# 获取当前目录下的文件
cdm_res = os.system("dir") #执行命令不保存结果
cdm_res = os.popen("dir").read()#获取当前目录保存在cdm_res总中
print("--->",cdm_res)
# 在当前目录创建目录
os.mkdir("new_dir")

pyc是个什么东西?

编译型语言就是执行程序的时候把程序转换成机器语言,然后执行。比如c语言,.c -> .exe

解释型语言就是没有编译,直接运行,在运行的时候解释器对程序进行逐行的解释,运行。(类似于边执行边编译)

java是通过编译器变成“中间编码”,然后执行的时候在利用解释器进行逐行的翻译。(先编译后解释)

python与java是类似的,只是python不用手动编译,编译的过程对用户是透明的。PyCodeObject是程序编译后的结果,当python运行完是,解释器将PyCodeObject写回pyc,当第二次执行的时候直接运行pyc文件,不用再次编译的。pyc是预编译后生成的一个字节码文件。

 

数据类型

整型:在python 2.x中会分为长整型和短整型,保存一个数字如果超过短整型时会自动存为long。

但是python3.x中并没有区分,都是int型。

浮点数:表示形式为小数。52.3E4 = 52.3 * 10 ** 4 。还可以表示复数,j表示虚数

布尔值:真或假  /  Ture and False 

bytes类型:在python3中文本和二进制有明显的区分。文本总是unicode,由str类型表示,二进制数据则是用bytes类型表示。

文件也可以用字节包来表示,那么字符串和字符包能够相互转换,str -> bytes 使用encode。bytes -> str 使用decode。

msg = '我爱天安门'
print(msg)
print(msg.encode())
print(msg.encode().decode())

结果:
我爱天安门
b'\xe6\x88\x91\xe7\x88\xb1\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
我爱天安门

encode(),decode()在python3中默认为utf-8编码

在python3中数据的传输必须以二进制的形式传输,所以在socket传输数据的时候可能会用到二进制和字符串的转换。

三元运算

result = a1 if a1>b else a2

如果if后面的式为真,结果为a1 ,为假则结果为a2。
 

列表:name = [ ]

按位置取 name[n],取name中的第n个元素。列表的切片:name[a:b] 取name中的[a,b)左闭右开。

插入 name.insert() 或者 .append(),删除name.remove() 或者 del name[a] 或者 name.pop()。pop默认删除最后一个。

查询位置 name.index("aaa") ,返回aaa的下标。统计 name.count()  清空 .clear()  翻转 .reverse() 排序 .sort() 按照ASCII 。合并 .extend()

浅copy : 可以想象成只copy了第一层的数据。

import copy
person = [1,5,8,9,8,5,7,[881,400]]
# 浅copy的三种形式
p1 = person.copy()
p2 = person[:]
p3 = list(person)
person[0] = 500
person[7][0] = 5000
# p1[1][1] = 50
print(person)
print(p1,"\n",p2,'\n',p3)
结果:
[500, 5, 8, 9, 8, 5, 7, [5000, 400]]
[1, 5, 8, 9, 8, 5, 7, [5000, 400]] 
 [1, 5, 8, 9, 8, 5, 7, [5000, 400]] 
 [1, 5, 8, 9, 8, 5, 7, [5000, 400]]

如果直接用“=”来复制的时候:完全相同

import copy
person = [1,5,8,9,8,5,7,[881,400]]
# 直接等号
p1 = person
person[0] = 500
person[7][0] = 5000
# p1[1][1] = 50
print(person)
print(p1)
结果:
[500, 5, 8, 9, 8, 5, 7, [5000, 400]]
[500, 5, 8, 9, 8, 5, 7, [5000, 400]]

深copy : 完全独立的两个列表,占用两份的空间地址

import copy
person = [1,5,8,9,8,5,7,[881,400]]
# 深copy
p1 = copy.deepcopy(person)
person[0] = 500
person[7][0] = 5000
# p1[1][1] = 50
print(person)
print(p1)
结果:
[500, 5, 8, 9, 8, 5, 7, [5000, 400]]
[1, 5, 8, 9, 8, 5, 7, [881, 400]]

元组:和列表差不多,但是一旦创建就不可以更改,又叫做只读列表。name = ()

函数: name.isdigit() 判断变量是否为数值。enumerate(name) ,把列别的下标取出后与列表打包在一起

字符串处理相关函数:

name.capitalize()  -----  首字母大写

name.count("a")   -----  统计数量

name.center(50,"-")  ------  打印50个字符,不足位用”-“补足

name.endswith("ex")  ---- 判断是否为”ex"结尾,返回Ture 或者 False

name.expandtabs(tabsize=30) --- 用30个空格代替tab

name.find("y") ----- 返回字母y所在的下标

name.format()  --- 格式化输出

name.format_map()  -----  传入一个字典,和format作用一样。

name.isalnum() ---- 判断是否只有字符和数字

name.isalpha()  ---- 判断是否只包含字符

name.isdigit() ---- 判断是否为整数

name.isidentifier() ---- 判断是否为合法标识符

 name.isnumeric() ----- 判断是否只包含数字

name.isspace() ---- 判断是否为空格

name.istitle()  ----  判断是否每个首字母大写

name.isprintable() ----- 是否可以打印,例如tty file ,drive file不可打印

“+“.join(sequence)  -----  用”+“连接sequence中的每个元素

name.ljust(50,"-")  ------  不够50位在最后用“----”补足

name.rjust(50."*") ----- 不够50位在最前面用***补足

name.lower() -----  变为小写

name.upper() ----- 变为大写

name.strip() ----- 去掉两边的空格和回车

name.lstrip() ---- 去掉左边的空格和回车

name.rstrip() ---- 去掉右边的空格和回车

p = str.maketrans("abcdef","12356")      name.translate(p)  ----- 把name中的'abcdef' 换成对用的 ’123456‘

name.replace("l","L",1)  ---- 用第二个字符代替第一个字符,第三个数字代表替换的数量。

name.split() -----  把字符串按照空格分隔变成列表。默认为空格,可以改成按照其他字符分割

name.splitlines() --- 按照换行符分隔

name.swapcase()  --- 倒置字符串

name.title() ---- 变成一个title,首字母大写

name.zfill()  ---- 不足位用0补足

字典:字典是无序的。且字典没有下标,是通过key值索引。所以key必须是唯一的。

# key - value
info = {
    'stu1101':"zzhang",
    'stu1102':"yyang",
    'stu1103':"qqqang",
}

修改或增添的时候直接赋值:(如果key存在直接修改,如果key不存在则新增一个)

info['stu1101'] = "iiiuys"
info['stu1104'] = 'hahahaha'
print(info)
结果:
{'stu1101': 'iiiuys', 'stu1102': 'yyang', 'stu1103': 'qqqang', 'stu1104': 'hahahaha'}

删除:info.pop("key")  随机删除:info.popitem()  查找: info["key"] (要确定字典中有这一项) info.get() 可以查找,如果没有就返回None

判断是否存在:’key' in info  存在返回true,不存在返回false

info.value() --- 所有value的值

info.key() ---- 所有的key

info.setdefault() --- 如果存在返回其值,不存在则创建一个新的项。

info.update(b) ---  把两个字典合并,有交叉部分就更新,无交叉部分就创建。

info.fromkeys()  --- 初始化一个字典,并赋一个初始化的值。(类似浅copy,一个修改全部修改,除非只有一层)

字典的循环:

info = {
    'stu1101':"zzhang",
    'stu1102':"yyang",
    'stu1103':"qqqang",
}
for i in info:
    print(i,info[i])

# for k,v in info.items():
#     print(k,v)

结果:
stu1101 zzhang
stu1102 yyang
stu1103 qqqang

info.items()  ---- 以列表返回可遍历的(键,值)元组数组。

k = info.items()
print(k)

结果:
dict_items([('stu1101', 'zzhang'), ('stu1102', 'yyang'), ('stu1103', 'qqqang')])

集合:去重合并,关系测试。集合也是无序的。

集合的创建:

list_1 = [1,2.4,5,4,8,6,1,7,8]
list_1 = set(list_1)
print(list_1,type(list_1))
结果:
{1, 2.4, 4, 5, 6, 7, 8} <class 'set'>

两个集合的交集:list_1 & list_2

list_1 = [1,2.4,5,4,8,6,1,7,8]
list_1 = set(list_1)
list_2 = set([1,8,54,69,4])
print(list_1.intersection(list_2))
结果:
{8, 1, 4}

并集:list_1 | list_2

print(list_1.union(list_2))
结果:
{1, 2, 4, 5, 6, 7, 8, 69, 54}

差集:list_1 - list_2

print(list_1.difference(list_2))
结果:
{2.4, 5, 6, 7}

子集关系判断:

print(list_1.issubset(list_2))#判断2是否是1的子集
print(list_2.issuperset(list_1))#判断1是否是2的父集

对称差集:  list.symmetric_difference() -----  去掉交集的并集  list_1 ^ list_2

list.isdisjoint() ---- 判断交集是否为空,空返回true 。

基本操作:集合中无法插入,只能添加。

添加:t.add()   添加多项:t.update([1,2,3,4,5])  长度:len(a)   

删除:t.remove() t.pop()【随机删除并返回】  t.discard() 删除指定的值并返回

x in a  --- 测试x是否是a的成员   x not in a ---- 测试x是否不是a的成员

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值