Python 学习笔记

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的变量













































  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值