python基础

忽略警告

import warnings

warnings.simplefilter(action = "ignore", category = FutureWarning)
warnings.filterwarnings("ignore")

列表集合

# 交集
list(set(listA).intersection(set(listB)))

# 并集
list(set(listA).union(set(listB)))

# 差集
list(set(listA).difference(set(listB)))

名字对

girls=['alice','bernice','clarce']
boys=['chris','arnold','bob']

#低效(每次循环要检查girls的全部元素)
print ([b+'+'+g for b in boys for g in girls if b[0]==g[0]])
#------------------------
#改进(每次只检查首字母符合要求的部分元素)
letterGirls={}
for girl in girls:
	letterGirls.setdefault(girl[0],[]).append(girl)
 print ([b+'+'+g for b in boys for g in letterGirls[b[0]]])

函数

g=lambda x,y:x+y
print(g(1,2))
#------------------------
print((lambda x:x+1)(2))
#------------------------
#a=1,b=2;#=>**{'a':1,'b':2}
#1,2,3#=>*(1,2,3)
def story(*tuple,**dict):
	pass
story(1,2,3,a=1,b=2)
story(*(1,2,3),**{'a':1,'b'2})

def power(x,y,*other):
    pass
power(y=2,x=1)
power(*(1,2))
power(3,3,'hello')
power(3,3,1,2,3)

def interval(start,stop=None,step=1):
    'some message'
	if stop is None:
		start,stop=0,start
	result=[]
	i=start
	while i<stop:
		retsult.append(i)
		i+=step
	return result
interval(10)
interval(1,5)
interval(3,12,4)
interval(**{'start':3,'stop':12,'step':4})

闭包

def outer():
  x = 1
  def inner():
    print(x)
  return inner
foo = outer()
foo()

构造器 generator

  • yield 返回构造的内容
def generator(i):
  while i>0:
    n=yield i
    i-=1
    print(n)
  return '已不满足条件'

g=generator(3)

# print(next(g))
# print(next(g))
# print(next(g))

# 设置yeild的返回值
# 每次构造从上一次yeild结束的地方开始
# print(g.send(None))
# print(g.send('ren'))
# print(g.send('ren'))
# print(g.close())

# 会执行最后一个yield后的语句
for i in g:
  print(i)
  • yield from 从指定构造器函数返回构造内容

def itest():
  # value是generation函数的返回值
  value=yield from generator(3)
  print(value)
  return value

t=itest()

for i in t:
  print(i)

装饰器

  • 多用于执行前改变参数或添加流程
def logger(func):
  def inner(*args, **kwargs): #1
    print(args, kwargs)
    return func(*args, **kwargs) #2
  return inner

@logger #foo1=logger(foo1)【foo1函数再logger里面被扩张了,实际调用inner函数】
def foo1(x, y=1):
  return x * y
  
@logger
def foo2():
  return 2

foo1(5, 4)
foo1(1)
foo2()

高级排序

s=['akdjlkj','adkjkhjr','aekj','as']
#长度排序
s.sort(key=len)#返回None
print(x)
#------------------------
#反向排序
n=[1,2,3,4,5]
n.sort(reverse=True)
print(n)

断言

age=10
assert 0<age<100
#------------------------
age=-1
assert 0<age<100

if

print(1 if True else 2)

if a==1:
    print(1)
elif a==2:
    print(2) 
else:
    print(3) 

for循环

for i in range(0,10):#'0'可以忽略
    print(i)
#------------------------在字典
obj={'a':1,'b':2}
#获取键
for k in obj:
    print(k)
#获取键和值
for k,v in obj.items():
    print(k,'=',v)
#------------------------zip()
names=['a','b']
values=[1,2]
arr=zip(names,values) #arr=[('a',1),('b',2)]
for k,v in arr:
    print(k,'=',v)

推导式

result1=[x*x for x in range(10) if x%3==0]
result2=[(x,y) for x in range(3) for y in range(3)]#嵌套循环
print(result1)
print(result2)

data={i:randn() for i in range(10)}

exec & eval

  • exec(string):把字符串看作代码
a=1
scope={}
exec ('a=10',scope) 
print('全局a=',num)
print('局部a=',scope['a'])

scope['b']=2
print('作用域b=',eval('a+b',scope))

  • __init__(self):构造函数,构造时调用
  • __del__(self):析构函数,析构时调用
  • __repr__(self):定义直接打印时输出文本
  • __call__(self):实例充当函数使用时,调用此函数
  • __dict__:特殊属性,类的属性字典
  • ins.__class__.__name__:返回构造类型的名称相当于type(ins).name
  • dir(ins):返回实例所有的属性和函数列表
class Message:
  def __init__(self,msg):
    self.msg=msg
  def __repr__(self):
    return 'Message:%s' % self.msg
  def __call__(self):
    print('__call__')
    
x=Message('hello')
x() #调用__call__

继承

  • 理解1 父类与子类并集逻辑创建新的class模板
#单继承
class Person:
	members=0
	def __init__(self,name="default"):
		self.name=name
	def __del__(self):
		print("the obj be del")
	def setName(self,name):
		self.name=name
	def getName(self):
		return self.name
	def greet(self):
		print ("hello,world! i'am",self.name)
	def	__inaccessible(self):
		print("bet you can't see me")

class Men(Person):
	pass

person=Person()
print(person.getName())
print("--------------------")
mem=Men("zzz")
print(mem.getName())
print("--------------------")
print(mem.members)
mem.members+=1
print(mem.members)
print("--------------------")
print(issubclass(Men,Person))
print(isinstance(mem,(Men,Person)))
print(hasattr(Men,'setName'))
print(callable(getattr(Men,'setName',None)))
print(callable(getattr(mem,'setName',None)))
setattr(Person,'age',10)
print(mem.age)#10
setattr(mem,'age',20)
print(mem.age)#20
print(person.age)#10

print(mem.__class__)
print("--------------------")
del mem
print("--------------------")

#多继承
class A:
	def method(self):
		print("i am A")
class B:
	def method(self):
		print("i am B")
class C(B,A):
	pass

ins=C()
ins.method()

@classmethod

class A:
  def __init__(self,a,b,c):
    self.a=a
    self.b=b
    self.c=c

  # 可以传进当前类作为第一参数
  @classmethod
  def get_data(cls,c):
    # cls表示调用当前类名
    # 返回被初始化的实例
    return cls(a=10,b=20,c=c)
  
  # 类似于静态属性
  @classmethod
  def static_fun(cls):
    print('i am staticf_unc')


  def ptdata(self):
    print(self.a,self.b,self.c)

a=A.get_data(30)
a.ptdata()

A.static_fun()

异常

#example_01
class CustomException(Exception):
	pass
if True:
	raise CustomException
	
#example_02
class Calculator:
	muffled=False
	def calc(self,expr):
		try:
		    return eval(expr)
		except ZeroDivisionError:
			if self.muffled:
				print('Division by Zero')
			else:
				raise
			
#example_03
try:
	x=input('enter the first number')
	y=input('enter the second number')
	print(x/y)
#针对性捕获
except (ZeroDivisionError,TypeError,NameError) as e: #Exception
	print('your number were bogus')
	print(e)
#全捕获
except:
	print('something wrong happened')
else:
	print('no wrong')
finally:
	print('good bye')

常用库函数

sys.argv #list形式返回cmd输入的字符串
sys.path.append #把目录加入python的path中
__file__ # py自身路径及文件名
sys.argv[0] # py自身路径及文件名
os.path.basename(__file__) # 近获取文件名不获取名字

json

  • 默认json不能解析np数值类型的解决方法
class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return str(mktime(obj.timetuple()))
        elif isinstance(obj,np.float64):
            return float(obj)
        elif isinstance(obj,np.int64):
            return int(obj)
        return json.JSONEncoder.default(self, obj)
        
json.dumps(date,cls=MyEncoder)
  • 正常显示中文
json.dumps(date,ensure_ascii=False)

其他常用

getattr(obj,attr)

hasattr(obj,attr)

func.__doc__

if __name__=='__main__'

locals()

globals()

str.__class__

yield

yield from

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值