【学习笔记】python语法笔记

在这里插入图片描述

基础操作

中文编码

# -*- coding:utf-8 -*-#

注释

#

列表和元组

序列操作

索引

>>>'Hello'[-1]
    'o'
>>>'Hello'[1]
    'e'
>>>fourth=input('Year: ')[3]
    Year: 2005
>>>fourth
    ‘5’

切片

tag[32:-4]//左闭右开
//注:若a1在a2索引位置后面,则结果为空序列[a1:a2]

步长

>>>number[0:10:2] //左->右
>>>number[8:3:-1] //右->左

相加

列表

>>>[1,2,3]+[4,5,6]

字符串

>>>‘Hello’+'world'

相乘

>>>'python'*5
>>>[42]*10

成员资格

>>>permissions='rw'
>>>‘w’in permission
    True

列表

字符串与列表的转换

字符串到列表

list('    ')

列表到字符串

'    '.join(some list)

赋值

x[1]=2

删除

del names[2]

特殊赋值删除方式

切片赋值

name[2: ]=list('ar')//在第3个元素开始

代替插入

numbers[1:1]=[2,3,4]

代替del

numbers[1:4]=[    ]

列表方法

append(将对象附加到末尾)

lst.append(4)

clear

lst.clear()

copy

b=a //同一个指向
b=a.copy

count

x.count(1)

extend(附多个值到列表末尾)

a.extend(b)//效率大于a=a+b(使用a、b的副本创建新的列表)

index

knights.index('who')

insert

numbers.insert(3,'four')//在第4个元素前插入

pop

>>> x.pop() //删除(弹出)末尾

remove

>>> x.remove('be')//就地修改不返回值

reverse

>>> x.reverse()

sort(升序排列)

sorted(x)//获取排序后的列表副本

高级排序

x.sort(key=len)

元组

>>> tuple([1,2,3])  //列表到元组
    (1,2,3)

访问

>>> x[0:2]
    (1,2)

字符串

替换

% + 元组(同c中printf)

>>> format="Hello,%s,%s enough for ya"
>>> value=('world','Hot')
>>> format % values
    "Hello,world,Hot enough for ya?"

关键字参数(同Unix shell)

>>> from string import Template
>>> tmpl=Template("Hello,$who!$what enough for ya?")
>>> templ.substitute(who="Mars",what="Dusty")
    "Hello,Mars!Dusty enough for ya?"

format

>>> "{0},{1} and {2}".format("first","second","third")
    'first,second and third'

命名字段

>>> from math imort p;
>>> "{name} is approximately {value:2f}".format(value =pi,name="pi")
    "pi" is approximately 3.14

混合使用

>>> "{foo} {1} {bar} {0}".format (1,2,bar=4,foo=3)
    '3 2 4 1'

宽度,精度,千位分隔符

宽度

>>>"{num:10}".format(num=3)
    '            3'

精度

>>>"pi day is {pi:2f}".format(pi=pi)
    'pi day is 3.14'

千位分隔符

>>> 'One googol is {:,}'.format (10*100)
    'One google is 10,000,000,...,000'

符号,对齐和用0填空

0填空

>>> '{: 010.2f}'.format(pi)//0:用0填空,10:宽度,2f:精度
    '0000003.14'    

左对齐,居中对齐,右对齐

>>> print('{0:<10.2f}\n{0:^10.2f}\n{0:>10.2f}'.format(pi))
    3.14
        3.14
            3.14

方法

center 字符串剧中两边填充字符

>>> "The middle by Jimmy Eat World".center(39,"*")
    '***** The middle by Jimmy Eat World *****'

find 查找子串

>>> title ="Monty Python's Flying Circus"
>>> title.find ('Monty')
    0

join (合并字符串列表(防御参数字符串后))

>>> dirs='    ','usr','bin','env'
>>> '/'.join(dirs)
    '    /usr/bin/env'
>>> Print('c:'+'\\'.join(dirs))
    c:\usr\bin\env

lower 返回字符串 小写版本

>>> 'Trondheim Hammer Dance'.lower()
    'trondheim hammer dance'

replace 替换

>>> 'This is a test'.replace('is','eez')
    'Theez eez a test'

split 将字符串拆分为序列

>>> '1+2+3+4+5'.split('+')
    ['1','2','3','4','5']

strip (删除字符串开头末尾空白)

>>>'    internal whitespace is kept    '.strip()
    'internal whitespace is kept'

translate (单个字符替换,同时替换多个字符)

>>> table =str.maketrans('cs','kz',' ')//maketrans(建表),k代替c,z代替s,删除‘    ’
>>> 'this is an incredible test'.translate(table)
    'thizizaninkredibletezt'    

字典

列表:通过编号来访问各值
字典:通过名称访问各值的数据结构

创建

phonebook='{'Alice':'2341','Beth':'9102'}//'Alice':键(独一无二),'2341':项

dict

从其他映射或建一值对序列 创建字典

>>>[('name','gumby'),('age,42')]
>>>d=dict(items)
>>>d['name']
'gumby'

关键字实参

>>>d=dict(name='gumby',age=42)

基本行为

  • len(d)
  • d[k]
  • d[k]=v
  • del d[k] k in d

注:
1.自动添加(不像列表须使用append)
2.成员资格
k in d 字典到键
v in l 列表到值

字符串格式设置功能用于字典

>>>phonebook
{'Beth':'9102','Alice':'2341','cecil':'3258'}
>>>''Cecic's phone number is{cecil}''
format_map(phonebook)
''cecil's phone number is 3258''

字典方法

clear

d .(clear)//通过赋值字典是无法清除的

copy 浅复制(值可替换不可修改)值本身是原件而非副本

deepcopy 深复制

from keys 创建新字典

>>>dict.fromkeys(['name','age'])
{'age':None,'name':None}

get (项不在字典中也不会报错)

>>> print d.get('name')
None

items (返回一个包含有所有字典项的列表)

d.items()//字典项在列表中排序不确定 注:items() ->返回字典视图(不复制而是反映底层字典)

复制:

>>>list(d.items())

key 返回字典视图,包含字典中的键。

pop 获取与指定键相关值并删除(弹出)

>>>d={'x':1,'y':2}
>>>d.pop('x')
1
>>>d
{'y':2}

popitem

随机弹出一个字典项(高效逐个删除)

setdefault

字典中包含键时更新键-值对

update

若键相同,则替换

values

返回由值组成的字典视图,可重复

条件循环

打印多个参数

定义分隔符

>>>print("I","with","to",sep="_")

自定义结束字符串,替换默认的换行符

>>>print(hello,end=" ")
>>>print("world!")

导入

import  somemodule
or from somemodule import some function
or from somemodule import *
or import somemodule as XX

赋值

序列解包

>>>ralne=1,2,3
>>>x,y,z=valne
(*)收集多余值
>>>a,b,*rest=[1,2,3,4]
>>>rest
[3,4]

链式赋值

x=y=somefunction()

条件

布尔假:

  • False
  • None
  • 0
  • " "
  • ()
  • []
  • {}
num=int(input('enter a number:'))
if num>0:
    print()//空四个空格
elif num<0:
    print()
else:
    print()

比较

  • x==y
  • x<y
  • x>y
  • x>=y
  • x<=y
  • x!=y
  • x is y
  • x is not y
  • x in y
  • x not in y

布尔运算符

  • and
  • or
  • not

断言

>>>age=-1
>>>assert 0<age<100,'The age must be realistic'
//等同 if not condition 
				crash program

循环

while

x=1
while x<=100:
	print(x)
	x+=1

for(根据需求定制)

words=['this','is','an','ex','parrot']
for word in words
	print(word)

遍历特定范围的数range(0,100)(左闭右开)

选代时获取索引——值对 enumerate

for index,string in enumerate(string)//index:索引,string:值
	'xxx' in string:
	strings [index]='[censored]' 

while Tme——break

跳出循环

break——else

正常结束的情况

推导(从其他列表创建列表)

>>>[xxx for x in range(10)]
>>>[(x,y) for x in range(3) for y in range(3)]

等同于

result=[ ]
for x in range (3):
	for y in range (3)
		result.append((x,y))

pass 、del、 exec

pass

等同于‘{ }’

del 删除名称,并不能删除指向的值(还在内存中)

值无用后由python 解释器自动删除

exec(执行python语句) eval(返回python表达式的值)

设置命名空间避免变量被污染

>>>from math import sqrt 
>>>Scope={}     //字典
>>>exec('sqrt=1',scope)
>>>scope['sqrt']

抽象

def

def hello(name):
return'hello',+name+'!'

编写文档

def square(x):
	'Calculates the square of the number x'
	return x*x

访问

1.>>>square._doc_
2.>>>help(square)

注:当return没有返回值时返回None。
注:对序列执行切片,返回切片是副本。

>>>n=name[:]

关键字参数和默认值

>>>store(patient='Mr.',hour=10,munite=20)
def hello_3(greeting='hello',name='world')
	print('{},{}!':format(greeting,name))

收集参数 (提供任意参数)

def print_params (* params):
	  print (params)

(* 创建元组,将结果放在元组中)
收集关键字参数

>>>def print_params_3(**params):
>>>print(paramas)
>>>print_params_3(x=1,y=2,z=3)
{'z'=3,'x'=1,'y'=2}

分配参数

*: 分配元组
**: 分配字典
注意 :声明和调用最好不同时使用

作用域(命名空间)

globals( ):全局变量(局部变量会遮盖全局变量)
vars( ):作用域(看不见的字典)

抽象二(多态,封装,继承)

多态(同一函数,不同对象,不同行为)

(内置运算符和函数大量使用了多态)
Python编程方式的核心(可能并不有意为之)

创建

_metaclass_=type # python 2
class person:
	def set_name(self,name):
		self_name=name

调用

>>>foo=person()
>>>foo.set_name('luke skywalker')

外部可以访问属性

>>>foo.name
>>>'luke skywalker'

封装

使用方法或属性成为私有:_ _

class Secretive
	def_ _ inaccessible (self):
		print(" ")

外部访问私有:_类名 :

>>>s._Secrective_ _in a<cessible

函数vs方法

函数 def methocl(self) (类中 参数关联到所属实列)
方法 def funcion() (不在类中)

命名空间

def foo(x): return x*x

等同于

foo=lambda x:x*x

所有代码在类的命名空间(特殊)内执行

class MemberCounter:
  	members=0        (相当于 ptublic static)
	def init(self):
		MemberCounter.members +=1   (同static概念)
		\\(MemberCounter:类命名空间中的变量由类实例共享,等同于类中的全局变量)

继承(子类)

class SPAMFilter (Filter)

可用函数:

  • issubclass
  • bases
  • isinstance
>>>is subclass (SPAMFilter,Filter)//SPAMFilter:子,Filter:父(超类)
>>>SPAMFilter._bases_
>>>isinstance(s,Filter)//s:实例,Filter:类

多个超类

class Talking Caloulation(Calculator,Talker) 
	pass
(注:慎用,顺序决定同种方法名的覆盖)

异常

raise 引发异常

>>>raise Exception ('hyperdrive overload')  //内置异常类

自定义异常类 (对错误进行处理)

class SameCustomException(Exception):pass  //Exception:继承

捕获异常

try:
  ......
except ZeroDivisonError:
  ......

继续向上传播:

ecept ZeroDivision Error:
	if  self.muffled:
 	  print('Division')
	else:
	  raise

捕获多个异常

try:
...
except (ZeroDivisionError,TypeError):
...

访问异常本身并继续运行

except (Zero Divisionzmor,Type Error)as e:
	print(e)

finally

用于发生异常时执行清理工作

魔法(特殊)方法、特性、迭代器

python2->python3

metaclass=type

构造函数

class Foobar:
	def_init_(self):
		self.somevar=42
>>>f=Foobar()

等同于

>>>f=Foobar()  //分配内存
>>>f.init            //创造

子类构造函数

未关联的方法(由类调用 )

class SongBird(Bird):
	def_init_(self):
		Bird_init_(self)
		self.sound='Squawk!'

Super (新式类,返回所需的超类)

class SongBird(Bird):
	def _init_(self):
		super()._init_()
		self.sound='squank!'

可变对象需要实现4个基本行为(协议)

  • len(self)
  • getitem(self,key):
  • setitem(self,key,value)
  • delitem(self,key)

property (避免重复代码,通过存取方法定义,使假象属性变为属性)

class Reetangle:
	def _init_ (self):
		self.width=0
		self.height=0
def set_size(self,size):
	self.width,self.height=size
size=property (get_size;set_size)

迭代器

class Fibs:  (斐波那契)
	def _init_(self):
		self.a=0
		self.b=1
def _next_(self):
	self.a,self.b=self.b,self.a+self.b
	return self.a
def _iter_(Self):
	return self // (self:迭代器)

应用

>>>fibs=fibs()
>>>for f in fibs://开始迭代
>>>if f>1000
>>>break

生成器

yield

def flatten(nested):
	for Sublist in nested:
		for elememt in Sublist:
			yield element
>>>nested =[[1,2],[3,4],[5]]
>>>for num in flatten (nested):
		frint(num)
//生成多个值,每次一个

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值