本篇内容从《Python编程 从入门到实践》整理而来,供个人学习和参考。
squares = [value ** 2 for value in range(1, 11)]
print(squares[0: 3])
# 会输出列表的第0个、第1个和第2个元素,不会输出第3个元素
# 用切片可以全部复制
listb = lista[:]
# 直接赋值变量名不可以全部复制,两个变量指向的是同一个列表
listb = lista
tuple1 = (200, 50)
car = 'Audi'
car.lower() == 'audi'. # 返回True
如果要把小写单词转换成大写时,用title()方法。
3. 检查多个条件时,使用关键字and或or.
4. 检查特定的值是否包含在某个列表中,使用关键字in。
5. 检查特定的值是否不包含在某个列表中,使用关键字not in.
6. if-elif-else适用于只有一个条件满足的情况,只执行一个代码块;
如果想要执行多个代码块,需要使用一系列独立的if语句。
7. 在对列表进行操作前,一般会先用if语句检查列表是否为空。
alien = {'color': 'green', 'points': 5}
alien['color']
# 返回 green
alien['x_position'] = 0
alien['y_position'] = 10
del alien['points']
for my_key, my_value in mydict.items():
要编写用于遍历字典的for循环,可以声明两个变量,用于存储键值对中键和值,这两个变量的名称可以自己任意指定(如k和v)。
for 循环第二部分包含了字典名mydict和方法items(),返回一个键值对 列表。键值对的返回顺序和储存顺序不一定相同。
for name in favorite_language.keys():
for name in sorted(favorite_language.keys()):
for language in set(favorite_languages.values()):
msg = input("Please enter your name:")
print(msg)
这时,用户输入的名字存储在变量msg中,供后面程序的调用。
2. 要创建多行字符串,可以将前半部分保存在变量中,后半部分加在变量之后。(+=)
prompt = "If you tell us who you are, we can personalize the message you see."
prompt += "What is your first name?"
pets = ['dog', 'cat', 'fish', 'cat', 'rabbit']
while 'cat' in pets:
pets.remove('cat')
print(pets)
# 定义一个空字典
responses = {}
# 设置一个标志,决定循环是否继续进行
polling_active = True
while polling_active:
# 用while循环将用户输入的内容存储到字典中
name = input("\nWhat is your name?")
response = input("Which mountain would you like to climb?")
responses[name] = response
# 确定循环是否要继续,修改flag值
repeat = input("Would you like to let another person respond?(yes/no)")
if repeat == 'no':
polling_active = False
# 循环结束之后,显示结果
print("\n---Poll results---")
for name, response in responses.items():
print(name + " would like to climb " + response + '.')
def describe_pet(animal_type, pet_name):
...
describe_pet(animal_type = 'cat', pet_name = 'harry')
def make_pizza(*toppings):
...
形参名中的*星号让python创建一个名为toppings的空元组,元组大小未定,可以将所有收到的实参的值存储到元组中。
7. 如果传递的参数中有多种不同类型的实参,那么,在函数的定义中,需要将位置实参放在最前,其次是关键字实参,任意数量实参放在最后,当位置实参和关键字实参全部匹配完成后,剩余的参数都被包括到任意实参中去。
8. 有的时候,需要接受任意数量的实参,但是不知道传递给函数的是什么样的信息,这时候,可以将函数编写成能够接受任意数量的键-值对。在定义时,形参采用字典的形式。
def build_profile(first, last, **user_info):
# 在形参中,用** 两个星号创建一个字典
profile = {}
profile['first_name'] = first
profile['last_name'] = last
# 遍历形参中的字典,加入到profile字典中
for key, value in user_info.items():
profile[key] = value
return profile
user_profile = build_profile('albert', 'einstein', location='princeton', field='physics')
print(user_profile)
import pizza
from module_name import *
class Dog():
# 创建一个类,类的首字母大写
def __init__(self, name, age):
self.name = name
self.age = age
def sit(self):
...
def roll_over(self):
...
以self为前缀的变量可以供类中的所有方法使用,可以通过类的任何实例来访问这些变量。self.name = name, 获取形参name中的值,将其存储到变量name中,然后这个变量name被关联到当前的实例中。
5. 创建完类之后,根据类来创建实例,这里要遵循python的命名规则,通常首字母大写的名称指的是类,如Dog,小写的名称如my_dog指的是实例。
6. 想要获取属性的值,可以采用句点表示法。
my_dog.name
my_dog.sit()
my_dog.roll_over()
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
# 属性odometer_reading 给出了默认值,因此可以不用在类定义列表中写形参
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
# 形参odometer_reading已经有了默认值,所以可以不给他传值,(获取的就是默认值)
my_car = Car('audi', 'a4', 2016)
my_car.read_odometer()
my_car.odometer_reading = 23
通过方法修改属性值,需要编写一个新的方法,在方法的内部修改属性值。class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
# 属性odometer_reading 给出了默认值,因此可以不用在类定义列表中写形参
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
self.odometer_reading = mileage
my_car = Car('audi', 'a4', 2016)
my_car.update_odometer(23)
my_car.read_odometer()
有的时候需要对属性的值递增特定的量,可以通过方法对属性的值递增。
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
# 属性odometer_reading 给出了默认值,因此可以不用在类定义列表中写形参
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
self.odometer_reading = mileage
def increment_odometer(self, miles):
self.odometer_reading += miles
my_car = Car('audi', 'a4', 2016)
my_car.update_odometer(23)
my_car.increment_odometer(100)
my_car.read_odometer()
class ElectricCar(Car):
# 定义了一个子类,继承父类Car
def __init__(self, make, model, year):
super().__init__(make, model, year)
class ElectricCar(Car):
# 定义了一个子类,继承父类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.")
# 把battery相关的属性和方法提取出来,作为一个单独的类
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):
# 定义了一个子类,继承父类Car
def __init__(self, make, model, year):
# super()方法关联父类和子类
super().__init__(make, model, year)
self.battery = Battery()
# 用Battery类的实例化对象,作为ElectricCar类的一个属性
my_telsa = ElectricCar('telsa', 'model s', 2016)
my_telsa.battery.describe_battery()
# 在调用describe_battery()方法时,要先寻找my_telsa的battery属性,然后再调用Battery实例的方法describe_battery()
# 导入单个类
from car import Car # 打开模块car,导入Car类(类的首字母永远是大写的)
# 从一个模块中导入多个类
from car import Car, ElectricCar
# 导入整个模块
import car # 导入整个模块的话,调用类的时候用句点表示法module_name.class_name
# 导入模块中的所有类,这种做法不建议使用
from car import *
# 在一个模块中导入另一个模块
# 如果发现一个模块中的类需要用到另一个模块中的类,那么提前导入所需要的类
with open('pi_digits.txt') as my_file:
contents = my_file.read()
print(contents)
# print(contents.rstrip())
with open(filename) as file_object:
lines = file_object.readlines()
for line in lines:
print(line.rstrip())
filename = 'programming.txt'
with open(filename, 'w') as my_file:
my_file.write("I love python.\n")
print("Give me two numbers, and I will divide them.")
print("Enter 'q' to quit.")
while True:
first_number = input("\nFirst number: ")
if first_number == 'q':
break
second_number = input("\nSecond number: ")
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print("You can't divide by 0.")
else:
print(answer)
try-except-else代码块的工作原理如下:Python尝试执行try代码块中的代码,只有可能引发异常的代码才需要放在try代码块中。只有当try代码块成功执行时才需要运行的代码应该放在else中。except代码块告诉python,如果在运行try代码块时引发了指定的异常,应该怎么操作。
print("Give me two numbers, and I will divide them.")
print("Enter 'q' to quit.")
while True:
first_number = input("\nFirst number: ")
if first_number == 'q':
break
second_number = input("\nSecond number: ")
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
pass
else:
print(answer)
import json
numbers = [3, 4, 5, 11, 34, 6]
filename = 'numbers.json'
with open(filename, 'w') as f_obj:
json.dump(numbers, f_obj)
json.load()函数可以用于将文件中的数据读取到内存中。
以读取方式打开文件,用json.load()函数加载存储在文件中的信息。
import json
filename = 'numbers.json'
with open(filename) as f_obj:
numbers = json.load(f_obj)
print(numbers)
json.dump()和json.load()可以实现程序之间数据的共享。
(待补充)