day01
python是动态语言,变量的类型不固定,java是静态语言。
input()输入 输入的都是字符串,如果想要转换为其他类型,可以写成如下格式:
a = int(input('a = ')) //a的值输入后就会变成int型
print()输出
除法:python中有两种除法:
1./ 该运算符算出来的是浮点数,就算能被整除结果也还是浮点数。
2.// 该运算符算出来的是整数。取结果的整数部分。
字符串:r‘str’ str里是什么就是什么,r‘’表示不转义。
编码:
ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节
如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00000000 01000001
用Unicode编码虽然解决了乱码问题,但是它需要的存储空间大。所以,出现了把Unicode编码转化为“可变长编码”的UTF-8编码。
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码
str通过encode()方法可以编码为指定的bytes 比如:‘sad’.encode('utf-8') 通过utf-8进行转化
相应的decode()可以将bytes转化为str
常见的占位符有:
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
day02
list:
添加用insert() list.insert(1,'str')
删除用pop() list.pop()删除最后一位 list.pop(1)删除下标为1的元素
list里面的元素的数据类型可以不同
元组:tuple:
有序列表 t = (1,3,4)
不可变:所谓不可变是指它的指向不可变,例如如果元组里有一项是list,则list中的值是可变的。
当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来
条件判断:
if:
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
if判断条件还可以简写,比如写:
if x:
print('True')
只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。
循环:
两种循环:
1.for x in ...
例:names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
扩展:range(a)生成小于a的整数序列
list()转化成list
2.while循环
字典 dict:
相当于map key-value 多次对一个key放入value值,后面的会把前面的覆盖掉
用例:>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
如果key不存在会报错,为了防止这一问题的出现可以先进行判断
判断可以采用两种方法:1.in 2.通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value
要删除一个key,用pop(key)方法,对应的value也会从dict中删除
set:
无序的 没有重复元素,虽然可以重复添加,但是不生效。
创建set 需要用list创建 例:s = set([1,2,34])
dict和set显示都是用{}括起来的。
添加:add(key) 删除:remove(key)
数据类型转换:
int()、float()、str()、bool()...
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”
比如:a = abs a(-1) 相当于求-1的绝对值
定义函数:
使用def语句,依次写出函数名、括号、括号中的参数和冒号: 返回值用return表示
pass语句表示什么也不做。
函数可以返回多值,但其实只是返回一个tuple
默认参数:
函数的参数可以设定默认值,比如一个求数字n次方的函数power(x,n),可以存在两个参数,一个x为底数,一个n为指数
power(2,3)表示求2的3次方。当power(2)的时候就会报错,因为该函数有两个参数。
但是我们也可以这样定义他的参数power(x,n=2),这样当power(2)的时候,默认求的是2的平方,也就是n默认值为2.当然power(2,3)表示的还是求2的3次方。
使用默认参数时要注意:
必选参数在前,默认参数在后,否则Python的解释器会报错
当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数
可变参数:
指参数的个数可变:在参数前面加*
关键字参数:
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
例:def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw) //在这里,kw就是关键字参数
kw可以传入任意数量的关键字参数,最后组装成一个dict
person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
也可以事先创建一个dict,之后转化成关键字参数传进去(**)
命名关键字参数:
对关键字参数进行命名,只接受命名的参数。例如上面的person例子,**kw中可以命名只能传入'job'这一个参数,那么其他的'city'之类的参数就传不了。
定义例子如下:
def person(name, age, *, city, job):
print(name, age, city, job) //该函数命名了city和job两个关键字。
递归函数:
一个程序在调用它本身。
切片:
一般用于取一个list或tuple的部分元素
比如:L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
取前两个元素就可以这样操作:L[0:3] 表示取L的下标为[0,3)的元素
L[:3]同样表示上述操作。而且可以使用负数进行表示(倒数第一个下标为-1)
一些操作:
前10个数,每两个取一个:L[:10:2] -->[0, 2, 4, 6, 8]
所有数,每5个取一个: L[::5] -->[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
什么都不写,只写[:]就可以原样复制一个list
同理:tuple和字符串也能进行切片操作。
迭代:
for ... in ...
列表生成式:
列表生成式就是把生成list的表达式放进[]中,例如:
[x for x in range(1, 11)] 要放在list中的元素x 放在前面,如果想生成1-11的平方放在list中,可以这样:[x * x for x in range(1, 11)]
两层循环:
[m + n for m in 'ABC' for n in 'XYZ']: ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
还可以三层及以上循环
生成器:
generator。可以迭代,用()
g = (x * x for x in range(10)) 方法:next(g) 每次调用该函数,就会输出下一个值。
当到达最后一个元素时,因为没有下一个了,就会报错,所以一般迭代也使用for... in ... 即:for i in g
定义生成器的另一种方法:函数中存在yield 关键字的即为generator
generator和函数的执行流程不一样。一般函数是顺序执行,遇到return语句或者最后一行函数语句就返回。
而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
例子:输出杨辉三角:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
大神例子:def triangles(n):
L = [1]
while len(L) < n:
yield L
L.append(0)
L = [L[i - 1] + L[i] for i in range(len(L))]
迭代器:
可以直接用于for循环的对象为可迭代对象 即:Iterable
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
把list、dict、str等Iterable变成Iterator可以使用iter()函数:
高阶函数:
map():第一个参数是函数本身 第二个参数一般为一个list 表示将list中的成员依次传入第一个参数(即函数)中进行运算
例: list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
reduce:reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
用reduce前,需要先导包from functools import reduce
filter 用于过滤序列,基本用法和map相似,遍历序列中的成员,过滤掉返回false的变量
python是动态语言,变量的类型不固定,java是静态语言。
input()输入 输入的都是字符串,如果想要转换为其他类型,可以写成如下格式:
a = int(input('a = ')) //a的值输入后就会变成int型
print()输出
除法:python中有两种除法:
1./ 该运算符算出来的是浮点数,就算能被整除结果也还是浮点数。
2.// 该运算符算出来的是整数。取结果的整数部分。
字符串:r‘str’ str里是什么就是什么,r‘’表示不转义。
编码:
ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节
如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00000000 01000001
用Unicode编码虽然解决了乱码问题,但是它需要的存储空间大。所以,出现了把Unicode编码转化为“可变长编码”的UTF-8编码。
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码
str通过encode()方法可以编码为指定的bytes 比如:‘sad’.encode('utf-8') 通过utf-8进行转化
相应的decode()可以将bytes转化为str
常见的占位符有:
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
day02
list:
添加用insert() list.insert(1,'str')
删除用pop() list.pop()删除最后一位 list.pop(1)删除下标为1的元素
list里面的元素的数据类型可以不同
元组:tuple:
有序列表 t = (1,3,4)
不可变:所谓不可变是指它的指向不可变,例如如果元组里有一项是list,则list中的值是可变的。
当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来
条件判断:
if:
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
if判断条件还可以简写,比如写:
if x:
print('True')
只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。
循环:
两种循环:
1.for x in ...
例:names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
扩展:range(a)生成小于a的整数序列
list()转化成list
2.while循环
字典 dict:
相当于map key-value 多次对一个key放入value值,后面的会把前面的覆盖掉
用例:>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
如果key不存在会报错,为了防止这一问题的出现可以先进行判断
判断可以采用两种方法:1.in 2.通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value
要删除一个key,用pop(key)方法,对应的value也会从dict中删除
set:
无序的 没有重复元素,虽然可以重复添加,但是不生效。
创建set 需要用list创建 例:s = set([1,2,34])
dict和set显示都是用{}括起来的。
添加:add(key) 删除:remove(key)
数据类型转换:
int()、float()、str()、bool()...
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”
比如:a = abs a(-1) 相当于求-1的绝对值
定义函数:
使用def语句,依次写出函数名、括号、括号中的参数和冒号: 返回值用return表示
pass语句表示什么也不做。
函数可以返回多值,但其实只是返回一个tuple
默认参数:
函数的参数可以设定默认值,比如一个求数字n次方的函数power(x,n),可以存在两个参数,一个x为底数,一个n为指数
power(2,3)表示求2的3次方。当power(2)的时候就会报错,因为该函数有两个参数。
但是我们也可以这样定义他的参数power(x,n=2),这样当power(2)的时候,默认求的是2的平方,也就是n默认值为2.当然power(2,3)表示的还是求2的3次方。
使用默认参数时要注意:
必选参数在前,默认参数在后,否则Python的解释器会报错
当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数
可变参数:
指参数的个数可变:在参数前面加*
关键字参数:
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
例:def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw) //在这里,kw就是关键字参数
kw可以传入任意数量的关键字参数,最后组装成一个dict
person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
也可以事先创建一个dict,之后转化成关键字参数传进去(**)
命名关键字参数:
对关键字参数进行命名,只接受命名的参数。例如上面的person例子,**kw中可以命名只能传入'job'这一个参数,那么其他的'city'之类的参数就传不了。
定义例子如下:
def person(name, age, *, city, job):
print(name, age, city, job) //该函数命名了city和job两个关键字。
递归函数:
一个程序在调用它本身。
切片:
一般用于取一个list或tuple的部分元素
比如:L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
取前两个元素就可以这样操作:L[0:3] 表示取L的下标为[0,3)的元素
L[:3]同样表示上述操作。而且可以使用负数进行表示(倒数第一个下标为-1)
一些操作:
前10个数,每两个取一个:L[:10:2] -->[0, 2, 4, 6, 8]
所有数,每5个取一个: L[::5] -->[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
什么都不写,只写[:]就可以原样复制一个list
同理:tuple和字符串也能进行切片操作。
迭代:
for ... in ...
列表生成式:
列表生成式就是把生成list的表达式放进[]中,例如:
[x for x in range(1, 11)] 要放在list中的元素x 放在前面,如果想生成1-11的平方放在list中,可以这样:[x * x for x in range(1, 11)]
两层循环:
[m + n for m in 'ABC' for n in 'XYZ']: ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
还可以三层及以上循环
生成器:
generator。可以迭代,用()
g = (x * x for x in range(10)) 方法:next(g) 每次调用该函数,就会输出下一个值。
当到达最后一个元素时,因为没有下一个了,就会报错,所以一般迭代也使用for... in ... 即:for i in g
定义生成器的另一种方法:函数中存在yield 关键字的即为generator
generator和函数的执行流程不一样。一般函数是顺序执行,遇到return语句或者最后一行函数语句就返回。
而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
例子:输出杨辉三角:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
大神例子:def triangles(n):
L = [1]
while len(L) < n:
yield L
L.append(0)
L = [L[i - 1] + L[i] for i in range(len(L))]
迭代器:
可以直接用于for循环的对象为可迭代对象 即:Iterable
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
把list、dict、str等Iterable变成Iterator可以使用iter()函数:
高阶函数:
map():第一个参数是函数本身 第二个参数一般为一个list 表示将list中的成员依次传入第一个参数(即函数)中进行运算
例: list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
reduce:reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
用reduce前,需要先导包from functools import reduce
filter 用于过滤序列,基本用法和map相似,遍历序列中的成员,过滤掉返回false的变量