python学习笔记简书_python学习笔记

基础

运算符

//表示整除

%求余数

**乘方

语句和表达式

表达式是一些东西,语句是做一些东西

比如

2*2

print(2*2)

floor向上取整

ceil向下取整

用变量来引用函数

foo = math.sqrt

foo(4)=2.0

运行py文件的方法

1.python+_.py(文件路径要给出)

2.或者在py文件头加#!/usr/bin/env python,

然后chmod a+x _py,也要加路径,运行完后,可直接将文件拖入终端即可运行。

字符串

repr将对象转化为解释器能读取的形式

str则是将对象转化为人读取的形式

长字符串```

原始字符串r,结果不会处理中间的/;

但是不能以/结尾,需要对/进行转义,

print(r'c:/book/我是书.txt')

#/结尾出错,需要对/单独转义

raw---print(r'c:/book/this/')

out---print(r'c:/book/this' '//')

unicode,bytes,bytearray

二进制(0,1)表示,每8个一组,为1字节,1字节只能表示256个不同的值,其中bytes只能表示128个值

以后再补

列表和元组

序列--包括

容器:可包含其他对象的对象--主要包括:序列(列表,元组),映射(字典),集合(set)

列表(可修改)

元组(不可修改)

容器container

序列

list

tuple

映射

dict

集合

set

序列操作--索引,切片,相加,相乘。。。

索引从0开始

字面量可以直接索引,无需变量赋值。

元素切片,第一个索引包括,第二个索引,不包括

即元素个数为前后相减,3:6,即取3个元素,分别为4,5,6

从头开始[ : num];从尾开始[-num : ]

[ : ]取整个序列

numbers = [1,2,3,4,5,6,7,8,9,10]

numbers[3:6]

>[4,5,6]

numbers[0:1]

>[0]

numbers[-3:]

>[8,9,10]

步长,隐式,显式

numbers[0:10:2]

>[1, 3, 5, 7, 9]

numbers[::4]

>[1, 5, 9]

numbers[::-2]

>[10, 8, 6, 4, 2]

序列相加,相乘

None,空列表[],初始化

判断--布尔值用in来判断

相关函数-len(),max(),min()

list操作

字符串变列表

list('hello')

>['h','e','l','l','o']

' '.join(some_list)

>'book'

修改-索引赋值

删除-del/或者赋值为[]

切片赋值-number[2:] = ['a','b','c','d']

list方法--就是对象的函数

object.method(arguments)调用

1.append-将对象附加到list末尾,对象可以是list或者单一值

2.clear-清空列表内容类似lst[:]=[],取整个序列赋值为空

3.copy

可以发现,普通操作会同时影响a;需要用到copy方法,

a = [1,2,3,4]

b = a

b[1] = 'k'

>a

[1,'k',3,4]

c = a.copy()

>c[0] = 20

>[20,2,3,4]

4.count-指定元素在list中出现的次数

5.extend-将值附加到list末尾

6.index-指定值第一次出现的索引

7.insert-将一个对象插入列表;插入一个位置,并不会替换掉原值

8.pop-从list中删除一个元素(默认为最后一个),并返回该元素

栈stack-类似于一叠盘子,上面添加或者上面拿走(后进先出LIFO-last in first out)

a = [1,2,3]

a.pop()

>3

a

>[1,2]

9.remove-删除第一个为指定值的元素;与pop的区别就是不返回值

10.reverse-反转元素(反向排序),reversed-反向迭代器

11.sort-就地排序,对原list做修改

>x = [2,1,4,9,6]

>y = x.sort()

>print(y)

None

会报错,因为x.sort()是对x进行修改,并不返回值,所以y是None

需要用到copy()方法/或者sorted()函数,返回一个列表;

那么方法和函数的区别是什么呢?function/ method?

12.高级排序

sort()可以接受两个参数,key,reverse。其中将key设置为不同的函数是很有用的。

x.sort(key=len)

x.sort(reverse = True)

元组tuple--也是序列,但不能修改

创建

1.直接输入

2.用()

3.()表示空元组

4.只表示一个值

>43,

>(43,)

tuple to list

```

tuple(lst)

```

作用

作为映射中的键

某些内置函数和方法需要返回元组

字符串

设置字符串格式

%

format字符串方法,替换{},每个替换字段用{}。

>"{2}{3},{0} {0} {1}-{3}".format("to","be","or","not")

>'ornot,to to be-not'

字符串方法

1.center-在两端填充字符,使字符串居中

x.center(num,"strings")

2.find-查找子串,找到返回第一个字符的索引,找不到返回-1;可以用来查看是否存在某些元素

>k = "what is the weather today?".center(40,"~")

'~~~~~~~what is the weather today?~~~~~~~'

>k.find('book')

-1

>k.find('is')

12

>k.find('t',12,200)#设置起点和终点,包含起点,不包含终点

15

3.join-用法" ".join(lst),其中元素必须是字符串

4.lower-返回小写字符串,strings.lower();首字母大写strings.title()

5.replace-替换并返回替换后的结果

6.split-与join相反,拆分为序列

7.strip-删除字符串头尾的空白,并返回结果如果strings.strip('*~')删除首尾某些符号

8.translate-同replace,需要一个替换表

9.is开头

字典--映射的数据结构

序列是通过编号来访问值,字典是通过名称来访问

创建字典

键-值

项item:键-值对

{key1:value1,key2:value2....},其中key是唯一的,且不可改变,key可以是字符串,数字,元组

1.dict函数

>tems = [('name','kobe'),('age',37)]

>d = dict(items)

{'name': 'kobe', 'age': 37}

#或者如下:

>d = dict(name = 'kobe',age=37)

字典方法

1.clear-删除字典所有项,返回None

2.copy-浅复制,替换原件不影响,修改则受影响。这时需要用到copy模块 deepcopy()函数

浅copy和赋值都属于引用对象,深copy则为两个独立对象。

3.fromkeys-创建新字典,包含键,值为None

dict.fromkeys([key1,key2...])

4.get-可以用于访问不存在的key,返回None,或者自设的返回值

d.get(key,strings)-eg.d.get('name','N/A')

5.items-返回list,包含(key,value)

6.keys-返回key的视图

7.pop-删除键-值对

8.popitem-随机删除一项

9.setdefault-类似于get(),没有就往里面加

10.update-更新字典,key相同则替换,不同则往里添加。

条件、循环、其他语句

1.赋值-序列解包(可迭代对象解包)

左右元素必须相等,用*rest可以装剩下的元素,返回list

>x,y,z = 1,2,3

>values = 1,2,3

(1,2,3)

>x,y,z = values

>a,b,*rest = [1,2,3,4,5,6]

>rest

[3,4,5,6]

赋值语句右边是任何序列,*是一个list

2.链式赋值

x = y = somefun()等价于

x = y和y = somefun()

增强赋值

x + = 1,累计运算

2.条件语句

if _pass_ :

else:

或者

if _pass_:

elif :

else :

比较运算符

is-同一个对象,x与z虽然相等,但不是同一个对象;

list相等不等于相同,==来检查是否相等,is来看是否属于同一个对象,因为不同的对象可以进过变换成相等的,但本质仍为不同对象。

x = y = [1,2,3]

z = [1,2,3]

>x is y

True

>x == z

True

字符串比较

其实是比较字符的顺序值

and,or,not布尔运算符

用assert来判断是否正确

3.迭代

并行迭代

>names = ['a','b','c','d','e']

>ages = [1,2,3,4,5]

>zip(names,ages)#可迭代对象

>list(zip(names,ages))

[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)]

迭代获得索引

enumerate()-可迭代对象,索引-值的元组对

向后迭代和排序后迭代--大小写敏感

sorted()返回一个升序排序后的list

reversed()返回一个逆向排序的迭代器

跳出循环

break-满足条件跳出循环

continue-

while True-

循环中的else语句

推导

列表表达式

匹配男女同首字母对人

>girls = ['alice','bernice','clarice']

>boys = ['chris','arnold','bob']

lg = {}

for g in girls:

#g-girl_name;g[0]-first_letter,创建首字母字典,key-letter,value-[],返回一个空list,对其进行append方法

lg.setdefault(g[0],[]).append(g)

print([B+'+'+G for B in boys for G in lg[B[0]] ])

#字典推导

>{i:"{} squared is {}".format(i,i**2) for i in range(10)}

{0: '0 squared is 0',

1: '1 squared is 1',

2: '2 squared is 4',

3: '3 squared is 9',

4: '4 squared is 16',

5: '5 squared is 25',

6: '6 squared is 36',

7: '7 squared is 49',

8: '8 squared is 64',

9: '9 squared is 81'}

(),{}分别是生成器和字典推导

4.pass,del,exec

pass-什么都不做

del

exce-将字符串作为代码执行,不返回任何值

>exec("print('hello world!')")

hello world!

>eval("input('enter your name: ')")

'tony'

eval-返回,计算用字符串表示的python表达式的值

抽象

使用的函数命名应该通俗,一看就知道是做什么的。

函数编写文件-定义函数以后在del后加'strings',代表函数的说明,用func.__doc__查看函数说明。

所有函数都有返回值,没给的话默认是None

def test():

print('this is printed')

return

print('this is not')

>x = test()

this is printed

>print(x)

None

1.参数

行参-函数名后面的变量

实参-调用函数提供的值

def try_to_change(n):

n = 'mr.gumby'

name = 'mr.entity'

>try_to_change(name)

>name

'mr.entity'

从该例子可以看出,函数内行参:n,而运行的时候其实就是将name传递给n,对变量name本身并没有影响。参数存储在局部作用域。,如果参数是列表等,则需要用到list方法.copy()

lst[:]得到的是副本。

关键字参数

可以设置关键字参数,或者定义函数时设置成默认值

#也可以给默认值

#def hello_2(name = '',greeting ='')

def hello_2(name,greeting):

print('{},{}!'.format(name,greeting))

>hello_2(greeting='how are you',name='tony')

tony,how are you!

收集参数

def func(*params):定义参数时,参数前面加*表示将所有值放入一个元组中,*不收集关键字参数

用**可以收集关键字参数,返回字典

def print_params_4(x,y,z=3,*pospar,**keypar):

print(x,y,z)

print(pospar)

print(keypar)

>print_params_4(1,2,3,4,5,6,7,foo= 1,bar = 2)

1 2 3

(4, 5, 6, 7)

{'foo': 1, 'bar': 2}

分配参数

调用函数的时候,func(*params),将参数值分配给定义的函数,**是分配字典,*分配(序列)元组或者列表。

作用域

变量类似于看不见的字典,这种看不见的字典就是命名空间或者作用域

局部变量和全局变量

globals-返回包含全局变量的字典

local-包含局部变量的字典

如果参数重名,则globals()['重名参数']

重新关联-在内部重新定义全局变量global+变量名

作用域嵌套/闭包,更好的理解,调用和引用(在内存中存储了地址)。

递归

抽象2

对象:

多态

不同类型的对象执行相同的操作

封装

对外部隐藏对象工作原理的细节

继承

异常

raise

try:

x = int(input('enter the first number: '))

y = int(input('enter the second number: '))

print(x/y)

except ZeroDivisionError:

print("The second number can't be zero!")

用 try/except xxError来捕获异常

特性和迭代器

模块

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值