Python基础4(函数和类)
函数
#函数 返回字典
def build_person(first_name,last_name):
person={'first':first_name,'last':last_name}
return person
musician=build_person('s','zq')
print(musician)
{'first': 's', 'last': 'zq'}
def build_person(first_name,last_name,age=''):
person={'first':first_name,'last':last_name}
if age:
person['age']=age
return person
musician=build_person('s','zq',age=23)
print(musician)
{'first': 's', 'last': 'zq', 'age': 23}
#用户输入姓名,输入q时退出
def get_name(first_name,last_name):
full_name=first_name + ' ' + last_name
return full_name.title()
while True:
print("\nplease tell your name:")
print("enter 'q' at any time to quit")
f_name=input("First name:")
if f_name=='q':
break
l_name=input("Last name:")
if l_name=='q':
break
name=get_name(f_name,l_name)
print("\nHello, "+name+"!")
please tell your name:
enter 'q' at any time to quit
First name:s
Last name:zq
Hello, S Zq!
please tell your name:
enter 'q' at any time to quit
First name:q
#使用函数修改列表
def print_models(unprinted_designs,completed_models):
"""模拟打印每个设计,直到没有未打印的为止
打印每个设计后,将其移到completed_models中
"""
while unprinted_designs:
current_design=unprinted_designs.pop()
print("Printing model:"+ current_design)
completed_models.append(current_design)
def show_completed_models(completed_models):
print("\nThe following models have been printed :")
for completed_model in completed_models:
print(completed_model)
unprinted_designs=['iphone','huawei','xiaomi']
completed_models=[]
print_models(unprinted_designs,completed_models)
show_completed_models(completed_models)
print(unprinted_designs)
Printing model:xiaomi
Printing model:huawei
Printing model:iphone
The following models have been printed :
xiaomi
huawei
iphone
[]
#如果想 进制函数修改列表,用切片法[:]创建列表的副本
def print_models(unprinted_designs,completed_models):
"""模拟打印每个设计,直到没有未打印的为止
打印每个设计后,将其移到completed_models中
"""
while unprinted_designs:
current_design=unprinted_designs.pop()
print("Printing model:"+ current_design)
completed_models.append(current_design)
def show_completed_models(completed_models):
print("\nThe following models have been printed :")
for completed_model in completed_models:
print(completed_model)
unprinted_designs=['iphone','huawei','xiaomi']
completed_models=[]
#调用时用切片
print_models(unprinted_designs[:],completed_models)
show_completed_models(completed_models)
#不会修改列表
print(unprinted_designs)
Printing model:xiaomi
Printing model:huawei
Printing model:iphone
The following models have been printed :
xiaomi
huawei
iphone
['iphone', 'huawei', 'xiaomi']
#传递任意数量的实参
def make_piza(*toppings):
print(toppings)
make_piza('aaa')
make_piza('a','b','c')
def make_piza2(*toppings):
for topping in toppings:
print("-" + topping)
make_piza2('aaa')
make_piza2('a','b','c')
('aaa',)
('a', 'b', 'c')
-aaa
-a
-b
-c
#如果要让函数接收不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后
def make_pizza(size,*toppings):
print("size="+str(size)+" toppings:")
for topping in toppings:
print("-" + topping)
make_pizza(15,'aaa')
make_pizza(23,'a','b','c')
size=15 toppings:
-aaa
size=23 toppings:
-a
-b
-c
#使用任意数量的关键字实参
def build_profile(first,last,**user_info): #**user_info 两个星号创建一个user_info的空字典
#创建一个字典
profile={}
profile['first_name']=first
profile['last_name']=last
for key,value in user_info.items():
profile[key]=value
return profile
user_profile=build_profile('s','zq',lacation='jinan',field='cs')
print(user_profile)
{'first_name': 's', 'last_name': 'zq', 'lacation': 'jinan', 'field': 'cs'}
类和对象
class Dog():
def __init__(self,name,age):
self.name=name
self.age=age
def sit(self):
print(self.name.title()+" is now sitting")
def roll_over(self):
print(self.name.title()+" rolled over!")
#创建对象
m_dog=Dog('aaa',6)
m_dog.sit()
m_dog.roll_over()
print("dog is "+ str(m_dog.age)+' years old')
Aaa is now sitting
Aaa rolled over!
dog is 6 years old
class Car():
def __init__(self,make,model,year):
self.make=make
self.model=model
self.year=year
self.odometer_reading=0 #给属性设置默认值 里程表
def get_descriptive_name(self):
long_name=str(self.year)+' '+self.make+' '+self.model
return long_name.title()
def read_odometer(self):
print("This car has "+str(self.odometer_reading)+" miles on it.")
def update_odometer(self,mileage):
if mileage >= self.odometer_reading: #通过方法修改属性的值,并且禁止将里程表数回调
self.odometer_reading = mileage
else:
print("You cannot roll back an odometer")
def increment_odometer(self,miles): #里程表数增加指定的值
self.odometer_reading += miles
my_used_car=Car('subaru','outback',2013)
print(my_used_car.get_descriptive_name())
my_used_car.update_odometer(23500)
my_used_car.read_odometer()
my_used_car.increment_odometer(100)
my_used_car.read_odometer()
2013 Subaru Outback
This car has 23500 miles on it.
This car has 23600 miles on it.
继承
#继承
class Car():
def __init__(self,make,model,year):
self.make=make
self.model=model
self.year=year
self.odometer_reading=0 #给属性设置默认值 里程表
def get_descriptive_name(self):
long_name=str(self.year)+' '+self.make+' '+self.model
return long_name.title()
def read_odometer(self):
print("This car has "+str(self.odometer_reading)+" miles on it.")
def update_odometer(self,mileage):
if mileage >= self.odometer_reading: #通过方法修改属性的值,并且禁止将里程表数回调
self.odometer_reading = mileage
else:
print("You cannot roll back an odometer")
def increment_odometer(self,miles): #里程表数增加指定的值
self.odometer_reading += miles
#电动车类继承Car
class ElectricCar(Car):
def __init__(self,make,model,year):
"""初始化父类的属性"""
super().__init__(make,model,year)
"""初始化电动车类特有的属性 电瓶容量"""
self.battery_size=70
def describe_battery(self):
"""打印电瓶容量的信息
"""
print("This car has a "+ str(self.battery_size)+"-kwh battery.")
my_tesla = ElectricCar('tesla','model s ',2016) #
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
2016 Tesla Model S
This car has a 70-kwh battery.
#将实例用作属性 将大型类拆分成多个协同工作的小类
class Car():
def __init__(self,make,model,year):
self.make=make
self.model=model
self.year=year
self.odometer_reading=0 #给属性设置默认值 里程表
def get_descriptive_name(self):
long_name=str(self.year)+' '+self.make+' '+self.model
return long_name.title()
def read_odometer(self):
print("This car has "+str(self.odometer_reading)+" miles on it.")
def update_odometer(self,mileage):
if mileage >= self.odometer_reading: #通过方法修改属性的值,并且禁止将里程表数回调
self.odometer_reading = mileage
else:
print("You cannot roll back an odometer")
def increment_odometer(self,miles): #里程表数增加指定的值
self.odometer_reading += miles
class Battery():
"""模拟电动车电瓶"""
def __init__(self,battery_size=70):
self.battery_size=battery_size
def describe_battery(self):
print("This car has a "+ str(self.battery_size)+"-kwh battery.")
class ElectricCar(Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)
self.battery = Battery()
my_tesla = ElectricCar('tesla','model s ',2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
2016 Tesla Model S
This car has a 70-kwh battery.