Python3 学习手册每日更新

Stella981
• 阅读 430
1、数学计算:
n的m次方:n**m
n除以m的整数值:n // m
n除以m的浮点值:n / m
Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 
复数的实部a和虚部b都是浮点型
tuple的元素不可改变,但它可以包含可变的对象,可变对象中的元素可以改变。
string、list和tuple都属于sequence(序列)

集合(set)的运算:- | & ^
2  进制是 0b 
8  进制是 0o
16 进制是 0x 

创建一个空集合用 set()
创建一个空字典用 { }。


2、转义字符输出,添加 r 使用原始字符
反斜杠可以用来转义,使用r可以让反斜杠不发生转义。。 如 r"this is a line with \n" 则\n会显示,并不是换行。
print('C:\name\111')
#输出 C:
      ame\111
print(r'C:\name\111')
#输出 C:\name\111

3、多行输出,去除第一行换行加 \ 
print('''
nihao
zaima
''')
#输出
[space]
nihao
zaima
print('''\
nihao
zaima
''')
#输出
nihao
zaima

3、使用 + 进行字符串的连接,使用 * 进行字符串的重复
Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
3*'aaa'+'bbb'
#输出
aaaaaaaaabbb

4、最后式子的值作为下面的输入  _
'aaaa'
a=_
print(a)
#输出
aaaa
3*5
3+_
#输出
18

5、多个赋值,右侧的表达式在赋值发生之前都是计算的
a,b=1,2
a,b=a,a+b
a,b
#输出
(2,3)


6,print()输出
print('aaaa',end=',')
print('bbbb')
#输出
aaaabbbb

7、在循环内修改正在迭代的序列(例如,复制所选的项目),建议首先创建原序列的拷贝。
对序列进行迭代不会隐式地进行复制。
切片符号使这特别方便:
for w in words[:]:  # Loop over a slice copy of the entire list.
     if len(w) > 6:
         words.insert(0, w)
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']

for w in words:
     if len(w) > 6:        
        words.insert(0, w)
#死循环

8、for循环的else子句在未出现break时运行
for x in range(7):
    if x>5:
        print(x)
        break
else:
    print('else')
#输出
6
for x in range(7):
    if x>5:
        print(x)
else:
    print('else')
#输出
6
else

9、默认值在函数定义的时刻,在定义的作用域中计算,当默认值是一个可变对象(如列表,字典或大多数类的实例)时,这会产生不同。
i=5
def f(arg=i):
    print(arg)
i=6
f()
#输出
5
def f(a,L=[]):
    L.append(a)
    return L
f(1) #输出[1]
f(2) #输出[1,2]
f(3) #输出[1,2,3]
如果你不想在后续调用之间共享默认值,你可以写这样的函数
def f(a,L=None):
    if L is None:
        L=[]
    L.append(a)
    return L
    
10、如果存在一个**name形式的形式参数,它将接收一个字典(参见映射类型——字典),这个字典包含除形式参数之外的所有关键字参数。
它可以与*name形式的形式参数组合,这种形式接收一个元组,这个元组包含除形式参数之外的所有位置参数。(*name必须出现在**name之前)
def test(**kr):
    return kr
def test2(*z):
    return z
def test3(*kr,**z):
    return kr,z
def test4(a,b=1,e=3,*c,**d):
    return a,b,e,c,d
print(test(a=4,b=2,c=5))    
print(test2(1,2,3,4))
print(test3('a','b','c',a=1,b=3))
print(test4(1,1,2,2,3,4,c=5))
#输出
{'a': 4, 'b': 2, 'c': 5}
(1, 2, 3, 4)
(('a', 'b', 'c'), {'a': 1, 'b': 3})
(1, 1, 2, (2, 3, 4), {'c': 5})

11、函数:string.join()
  join():连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
def testJoin(*arg,seq='/'):
    return seq.join(arg)
print(testJoin('D:','com','geng'))
print(testJoin('D:','com','geng',seq='\\'))
#输出
D:/com/geng
D:\com\geng

12、Lambda函数可用于需要函数对象的任何地方。它们在语法上限于单个表达式。语义上,它们只是用于正常函数定义的语法
def func(n):
    return lambda x,y:x+y+n
f=func(1)
print(f)
print(f(1,23))
print(f(2,3))
pair=[(1,2),(3,7),(4,3)]
pair.sort(key=lambda x:x[1])
print(pair)


13、函数注解
注解以字典形式存储在函数的__annotations__属性中,对函数其它任何部分没有任何影响。
参数注解的定义是参数名后面跟着一个冒号,然后紧跟着一个用于计算注解的表达式。
def functest(t:str,eg:int=1)->str:
    print(functest.__annotations__)
    print(t+'aaa',eg)
functest('11111', 111)
#输出
{'t': <class 'str'>, 'eg': <class 'int'>, 'return': <class 'str'>}
11111aaa 111

def my_function():
     """Do nothing, but document it.

     No, really, it doesn't do anything.
     """
     pass
print(my_function.__doc__)
#输出
Do nothing, but document it.

    No, really, it doesn't do anything.

14、string.strip(str),
声明:string为字符串,str为要删除的字符序列
s.strip(rm)      删除s字符串中开头、结尾处,位于rm删除序列的字符
s.lstrip(rm)     删除s字符串中开头处,位于rm删除序列的字符
s.rstrip(rm)     删除s字符串中结尾处,位于rm删除序列的字符
string.strip(' ')
'111 2222 333 444'
string.lstrip(' ')
'111 2222 333 444   '
string.rstrip(' ')
' 111 2222 333 444'
!!!!!!!当rm为空时,默认删除空白符(包括'\n', '\r',  '\t',  ' ')
 string=''' \n nihao \t'''
 string.strip()
 'nihao'

15、zip()函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表
 a=[[1,2,3,4],[5,6,7],[8,9,10,11,12]]
 list(zip(*a))
>>>[(1, 5, 8), (2, 6, 9), (3, 7, 10)]
 list(zip(a))
>>>[([1, 2, 3, 4],), ([5, 6, 7],), ([8, 9, 10, 11, 12],)]
aa=[1,2,3]
bb=[1,2]
cc=[1,2,3,4]
zip(aa,bb,cc)
[(1, 1, 1), (2, 2, 2)]

16、当循环遍历字典时,键和对应的值可以使用items()方法同时提取出来。
k={'111':1,'222':2,'33333':3}
for k,v in k.items():
    print(k,':',v)
111 : 1
222 : 2
33333 : 3

17、两个或更多的序列,使用zip()函数可以成对读取元素。
q=['name','age','sex']
a=['geng',23,'man']
for x,y in zip(q,a):
     print('{0}:{1}'.format(x,y))
     
18、is和is not比较两个对象是否为相同的对象;这只对列表这样的可变对象比较重要
    x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False,id() 函数用于获取对象内存地址。

19、str()与repr(),str()用于显示人类所看到的,repr()用于编译所看到的
s='\n'
str(s) #输出 \n
repr(s) #输出 \\n  #编译时对 \ 进行了转义

20、str.center()、str.ljust(int)和str.rjust(int),str占用int个字节,并且左右对齐
如果输入的字符串太长,字符串不会被截断,会完整输出。
a='10'
a.center(5)  #'  10 '
a.ljust(5)   #'10   '
a.rjust(5)   #'   10'
如果你真的想要截断,可以加上一个切片操作,例如x.ljust(n)[:n],不过将失去对齐方式

21、str.zfill(),它向数值字符串左侧填充零。它理解加号和减号,超出是也不会截断
'-3.14'.zfill(7)
#'-003.14'

22、str.format()
'!a'(运用ascii())、'!s'(运用str())和'!r'(运用repr())可以用来在格式化之前转换相应的值。
':'后面紧跟一个整数可以限定该字段的最小宽度。
print('---{1!r:10}---{2!a:10}---{0!s:10}---'.format("111\n","222\n","3333\n"))
#输出
---'222\n'   ---'3333\n'  ---111
      ---
可以传入一个字典,然后使用'[]'访问
dict={"str":"string",10:10,"PI":3.1415926}
print('str{0[str]:10s},int{0[10]:5d},{0[PI]:.3f}'.format(dict))
#输出
strstring    ,int   10,3.142

23、其他类型的对象,在写入之前则需要转换成 字符串 (在文本模式下) 或 字节对象 (以
二进制模式)
value = ('the answer', 42)
s = str(value)  # convert the tuple to string
f.write(s)
#文件中显示
('the answer', 42)

24、f.seek(offset, from_what)更改该文件对象的位置,
from_what可以省略,默认为0,使用文件的开头作为参考点。
当from_what的值为0,1,2 时,分别使用文件开头、当前文件位置和文件结尾作为参考点
位置由参考点加上offset 计算得来。
f=open('test.txt','rb+')
print(f.write(b'011234567asdcvfg'))
f.seek(5)               #默认0开始读取
print(f.read(1))
print(f.tell())          #当前位置
f.seek(5,1)              #当前位置开始读取
print(f.read(1))
f.seek(-1,2)             #文件末尾开始读取
print(f.read(1))
#输出
16
b'4'
6
b'd'
b'g'

25、file.tell()返回一个整数,代表文件对象在文件中的当前的位置,
在二进制模式中该数值表示自文件开头到指针处的字节数,在文本模式中则是不准确的。
例题看上面
在文本文件中(没有以b模式打开的文件),只允许从文件的开始查找(有个例外是查找到文件的末尾seek(0, 2)),
而且offset只有是从f.tell()返回的值或者是0才是合法的。任何其他偏移值会产生未定义的行为。

26、使用json存储结构化数据
json.dumps([1, 'simple', 'list'])
>>>'[1, "simple", "list"]'
dumps()函数的另外一个变体dump(),直接将对象序列化到一个文本文件。
如果f是为写入而打开的一个文件对象
json.dump(object, file)
为了重新解码对象,如果f是为读取而打开的文本文件对象 :
object = json.load(f)

27、type与isinstance
type()不会认为子类是一种父类类型。
isinstance()会认为子类是一种父类类型

class A:
    pass

class B(A):
    pass

isinstance(A(), A)  # returns True
type(A()) == A      # returns True
isinstance(B(), A)    # returns True
type(B()) == A        # returns False

27、构造函数 dict() 可以直接从键值对序列中构建字典
dictE = dict ([("ee",11), ("aaa", "bbbb"), (123, 123), (True, True)]); 
print (dictE);

dictF = {x: x*2 for x in (2, 4, 6)};
print (dictF);

dictG = dict (name = 1, goole = "name", bool = True);
print(dictG);

28、isdigit、isnumeric、isdecimal的差别
isdigit()
True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字
False: 汉字数字
Error: 无

isdecimal()
True: Unicode数字,,全角数字(双字节)(十进制)
False: 罗马数字,汉字数字
Error: byte数字(单字节)

isnumeric()
True: Unicode数字,全角数字(双字节),罗马数字,汉字数字
False: 无
Error: byte数字(单字节)

29、 splitlines() 
按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,
如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
print ('ab c\n\nde fg\rkl\r\n'.splitlines());
print ('ab c\n\nde fg\rkl\r\n'.splitlines(True));
>>>
['ab c', '', 'de fg', 'kl']
['ab c\n', '\n', 'de fg\r', 'kl\r\n']

30、list.copy()与 = 赋值
使用 = 直接赋值,是引用赋值,更改一个,另一个同样会变;
copy() 则顾名思义,复制一个副本,原值和新复制的变量互不影响;

31、
循环语句可以有 else 子句,
它在穷尽列表(以for循环)或条件变为 false (以while循环)
导致循环终止时被执行,但循环被break终止时不执行。

sites = ['1', '2', '3', '4'];
for site in sites:
    if site == '3':
        print ("找到了");
        break;
    print ("循环数据 " + site);
else:
    print ("没有循环数据!");
print ("完成循环!");
>>>
循环数据 1
循环数据 2
找到了
完成循环

32、Python的作用域一共有4种,分别是:
    L (Local) 局部作用域
    E (Enclosing) 闭包函数外的函数中
    G (Global) 全局作用域
    B (Built-in) 内建作用域
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

x = int(2.9)  # 内建作用域
 
g_count = 0  # 全局作用域
def outer():
    o_count = 1  # 闭包函数外的函数中
    def inner():
        i_count = 2  # 局部作用域


Python中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这这些语句内定义的变量,外部也可以访问

33、默认参数必须放在最后面,否则会报

34、global 和 nonlocal关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

global关键字用来在函数或其他局部作用域中使用全局变量。
nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量

35、def(**kwargs) 把N个关键字参数转化为字典:

>>> def func(country,province,**kwargs):
...     print(country,province,kwargs)
... 
>>> func("China","Sichuan",city = "Chengdu", section = "JingJiang")
China Sichuan {'city': 'Chengdu', 'section': 'JingJiang'}
>>> 

36、同时遍历两个或更多的序列,可以使用 zip() 组合:

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...    #print('what is your %s? it is %s' %(q,a))
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

37、在:file:sounds/effects/__init__.py中包含如下代码:
__all__ = ["echo", "surround", "reverse"]
这表示当你使用from sound.effects import *这种用法时,你只会导入包里面这三个子模块。 

38、使用del语句删除一些对象引用。
del var1[,var2[,var3[....,varN]]]]

39、注意:
Python可以同时为多个变量赋值,如a, b = 1, 2。
一个变量可以通过赋值指向不同类型的对象。
数值的除法(/)总是返回一个浮点数,要获取整数使用//操作符。
在混合计算时,Python会把整型转换成为浮点数。

40、集合(set)是一个无序不重复元素的序列。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合。

41、
字典是一种映射类型,它的元素是键值对。
字典的关键字必须为不可变类型,且不能重复。
创建空字典使用 { }。

42、
x and y    布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。    
x or y    布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。
not x    布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。

43、
repr(x)
将对象 x 转换为表达式字符串

eval(str)
用来计算在字符串中的有效Python表达式,并返回一个对象
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Karen110 Karen110
2年前
人工智能数学基础-线性代数4:矩阵及矩阵运算
一、矩阵定义矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,定义如下:由m×n个数aij排成的m行n列的数表称为m行n列的矩阵,简称m×n矩阵。记作:这m×n个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数aij为(i,j)元的矩阵可记为(aij)或(aij)m×n,m×
Stella981 Stella981
2年前
AndroidStudio封装SDK的那些事
<divclass"markdown\_views"<!flowchart箭头图标勿删<svgxmlns"http://www.w3.org/2000/svg"style"display:none;"<pathstrokelinecap"round"d"M5,00,2.55,5z"id"raphael
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Stella981 Stella981
2年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Wesley13 Wesley13
2年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
2年前
2.python内置数据结构
第一类:数值类型一.数值型包括1.int(整型):python3里数字不管多大永远都是int长整型,且没有大小限制,受限于内存区域的大小类型转换:int(x)返回一个整数2.float(浮点型):有整数部分和小数部分组成。支持十进制和科学计数法表示。只有双精度型类型转换:float(x)返回一个浮点数3.c