包与模块管理,面向对象编程
- 在定义函数传递值的时候,如果函数里的参数提前定义,那么会按照定义函数去执行
def func(a,b,c):
print(a,b,c)
func(c=1,b=2,a=3) #输出还是按照a,b,c的顺序
3 2 1
- 如果一个定义的函数参数需要是默认的值b=2 c=3
def func(a,b=2,c=3):
print(a,b,c)
func(1)
1 2 3 #这样输入的位子在a
func(9)
9 2 3
def func(a,b=3,c=3):
#一定要把未知数放在最前面,如果a=1,b,c=3就会报错,一定是a没有参数#
print(a,b,c)
func(1,c=5) #可以改掉c的值
1 3 5
- 如果会输入很多参数的时候,可以用*xx来表示
def avg(scores): #定义参数加上代表任意数量的参数
return sum(scores) / len(scores) #经常有忘记return一下,只有print不用,其余都用
result = avg(56,777,55,443,2,222,3,3)
print(result)
195.125 - 这里面就要问(56,777,55,443,2,222,3,3) 是一个元组,可不可以把这个单独表示出来呢
def avg(*scores):
return sum(scores) / len(scores)
scores = (56,777,55,443,2,222,3,3)
result = avg(scores) #如果直接用scores不行的,要把这个解开所以前面要加一个
print(result)
195.125 - 双个星号表示接收字典表
def display(**employee):
print(employee)
display(name=‘tom’,age=22,job=‘dev’)
{‘name’: ‘tom’, ‘age’: 22, ‘job’: ‘dev’}
- 同样对于字典表直接用也要解包一下
emp={‘name’:‘tom’,‘age’:22,‘job’:'dev’} #字典表
def display(**employee):
print(employee)
display(**emp) #直接引用字典表也要解包一下
{‘name’: ‘tom’, ‘age’: 22, ‘job’: ‘dev’}
def hello_chinese(name):
print(‘你好’,name)
def hello_english(name):
print(‘hello’,name)
while True:
name = input(‘请输入你的名字’)
if name == ‘gun’:
break
banben = input(‘请输入版本:c =>中文版本\n e=>english \nj=>japanese’)
if banben == ‘c’ :
hello_chinese(name)
elif banben == ‘e’:
hello_english(name)
elif banben == ‘j’:
(lambda name : print(‘wa ta xi wa’,name))(name)
可以换成:
def hello_chinese(name):
print(‘你好’,name)
def hello_english(name):
print(‘hello’,name)
while True:
name = input(‘请输入你的名字’)
if name == ‘gun’:
break
banben = input(‘请输入版本:c =>中文版本\n e=>english \nj=>japanese’)
if banben == ‘c’ :
Action = hello_chinese
elif banben == ‘e’:
Action = hello_english
elif banben == ‘j’:
Action = lambda name : print(‘wa ta xi wa’,name)
Action(name) #也可以这么写 - 三种方法把列表里面的每个元素都加上5
= list(range(1,21))
res = []
def add_number(x):
return x+5
#方法一:循环
for x in l :
res.append(x+5)
#方法二:推导
res=[x+5 for x in l ]
#方法三:函数
res=list(map(add_number,l)) #map就是把后面的每个数放到前面的函数里执行一下
print(res) #先去定义一个函数
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - map和filter的区别在于,map会在后面的区间执行每个数,而filter只是会把符合条件的输出
l = list(range(1,21))
res = []
def add_number(x):
if x % 2 == 0:
return x
方法一
for x in l :
if x % 2 == 0:
res.append(x)
方法二
res=[x for x in l if x %2 == 0]
方法三
res=list(filter(add_number,l)) #filter就是把符合前面函数条件的l里面的值输出出来
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
res=list(map(add_number,l)) #这样一对比就清晰了
[None, 2, None, 4, None, 6, None, 8, None, 10, None, 12, None, 14, None, 16, None, 18, None, 20]
def hello():
print(‘hello ji’)
if name == 'main’: #只能这样写__name__ == ’main’,通俗的理解_name_ == ‘main’:假如你叫小明.py,在朋友眼中,你是小明(name == ‘小明’);在你自己眼中,你是你自己(name == ‘main’)。
hello()
- 如果想要在调用的文件里修改内容,除了关掉重新import之外,还可以import importlib 然后import lib.reload(包)
import importlib
importlib.reload(models) #这个地方职能用包名
Out[4]: <module ‘models’ from ‘/Users/hezhipeng/PycharmProjects/untitled7/models.py’>
models.tesy()
models.tesy()
youpinhaokan
hhhhhh
原来输出为
models.tesy()
youpinhaokan
hhhhhh
dsss
改动后,需要引入import importlib 这个,import lib.reload(models)
- 面向对象编程
import datetime
class Book: #先分类
def__init__(self,title,price=29,author=‘lu’,publisher=‘zhejiang’,pubdate=datetime.date.today()):#定义初始化函数
self.title = title
self.price = price
self.author = author
self.publisher = publisher
self.pubdate = pubdate #表示后面进来的值都是self.值
def repr(self):
return ‘<图书 {} at 0x{}>’.format(self.title,id(self)) #在后面展示直接打book的时候看到提示
def print_info(self):
print(‘当前这本书的信息如下’)
print(‘书名:{}’.format(self.title))
print(‘价格:{}’.format(self.price))
print(‘作业:{}’.format(self.author))
print(‘出版社:{}’.format(self.publisher))
print(‘时间:{}’.format(self.pubdate))
book1 = Book(‘c#经典’,29.9,‘tom’,‘优品课堂’,datetime.date(2016,3,1))
print(book1.pubdate)
book2=Book(‘大败局’,67,‘b’,‘浙江大学’)
book2.title='春江绿水’
book2.print_info()