目录
一.元组
简单来说,就是把【】变成()的数组,元祖和数组的不同之处在于,元祖只能查看信息,不能进行修改.
二.Unpacking(解包)
有这样一种情况,我们需要一个数组中的数据相互进行运算:
将这个数组中的三个数相乘:
这显然太过麻烦了,在其他的语言中,可以使用x,y,z分别等于这三个元素,再进行运算,但在python中,这个过程被大大简化了:
coordinates = [1,2,3]
x,y,z = coordinates
三. Dictionaries(字典)
字典给人的感觉像是java里的类,但是只有各种属性值,它使用{}
字典的定义格式及打印方式如下:
打印的变量必须是严格一致,大小写相同,不然会发生关键字错误.
customer = {
"name": "John",
"age" : 30,
"is_verified": True
}
print(customer['name'])
# 获得额外的关键字,并给其赋值(赋值的部分可有可无,不赋值的话就是空关键字)
# 并不是真正获得关键字,print结束后这个关键字会移除
# 如果关键字已经存在,则不会赋值,而是直接返回找到的值
print(customer.get("birthdate", "Jan 1 1992"))
#获得额外的关键字,这个关键字会加入字典
customer["birthdate"] = "Jan 1 1992"
词典的价值之一在于翻译,比如将1翻译为一等。
练习:输入一个手机号码1234,将他转换为一二三四:
phone = input("Phone:")
digits_mapping = {
"1": "One",
"2": "Two",
"3": "Three",
"4": "Four"
}
for item in phone:
print(digits_mapping[item],end=" ")
print("")
执行结果
练习二:把文字表情变成emoji
注:在windows上使用emoji可以同时按住windows键和 . 键
emojis = {
":(": "😢",
":)": "😊"
}
output = ""
words = input('>').split(" ")
for word in words:
output += emojis.get(word,word) + " "
print(output)
其中split的功能是把由空格分隔的长字符串变为多个段字符串,所以words是一个数组。
执行结果
四.函数和参数
python中的函数同样是没有括号的,判断他们同属一个函数的标准是缩进(tab)。
argument:实际参数实参 parameter:形式参数形参
def Say_Hello(name):
print(f"Hi {name}!")
print("Greeting!")
Say_Hello("June")
def Greet_User(first_name, last_name):
print(f"Hi {first_name},{last_name}!")
Greet_User("June", "Pipboy")
# 参数不一定要按顺序输入,也可以手动指定。
# 但这样的话,就要为每个参数安排位置.
# 这种输入方式并不常用,但能提高程序的可读性
# 可以混用按顺序的参数和关键字的参数,关键字参数必须在顺序参数后面。
Greet_User(last_name = "Pipboy", first_name = "June")
Greet_User("June", last_name = "PipBoy")
# 与其他语言一样,函数返回值得语句是return
def square(number):
return number**number
print(square(3))
小练习:把之前的表情练习转化成函数
def Emoji_Translation(message):
words = message.split(" ")
emojis = {
":)": "😊",
":(": "😂"
}
output = ""
for word in words:
output += emojis.get(word, word) + ""
return output
message = input('>')
message = Emoji_Translation(message)
print(message)
执行结果
五.Exception(错误)
Python的错误控制是目前见过最简单的
首先执行try里的代码,发现错误时和下面except做对比,有则执行except的代码,否则就报错。
try:
age = int(input('Age:'))
income = 20000
risk = income / age
print(age)
except ValueError:
print('Invalid value')
except ZeroDivisionError:
print("Can't division by zero")
六.Class(类)
与Java中的类类似,一个类可以有自己的属性和方法,同时每一个实例化的类都是不一样的,可以临时给它们加上额外的属性
class Point:
# 定义所有属于Point的方法和变量.
def move(self):
print("move")
def draw(self):
print("draw")
# 实例化point,或者说创建一个point对象
point1 = Point()
# 使用point类里的方法
point1.draw()
# 为point加上额外的属性值
point1.x = 1
print(point1.x)
# 创建point2,point2不存在名为x的属性值,说明每个point类对象是独立的
try:
point2 = Point()
print(point2.x)
except AttributeError:
print("point2 does not contain atttribute x")
七.Constructor(结构体)
结构体是包含各种变量的数据结构
class Point:
# 定义所有属于Point的方法和变量.
# 定义一个结构体
def __init__(self,x , y):
self.x = x
self.y = y
# 创建对象并弄出结构体
point1 = Point(10,20)
print(point1.x)
小练习:定义一个Person类,包含一个name变量和talk方法
要注意的是,要调用类里的变量,必须有self.再加上变量.
class Person:
def __init__(self,name):
self.name = name
def talk(self):
print(f"{self.name} talk")
person1 = Person("Jack")
person1.talk()
八.Inheritance(继承)
与其他语言类似,Python的继承是为了避免重复的函数代码.
class Mammal:
def walk(self):
print("walk")
class Animal:
def bark(self):
print("bark")
# python 允许多继承
class Dog(Mammal,Animal) :
# pass关键字,代表什么都没有,规避python代码体不能为空的规则
pass
# 继承父类后能够使用父类的所有方法
puppy = Dog()
puppy.bark()
puppy.walk()
九. Modules(模块)
将程序的代码模块化,将代码分为多种输入不同的文件,可以增强代码的复用性.
在没有额外条件的情况下,模块与主文件应在同一个文件夹
#传入整个模块
import converters
#传入模块中的部分函数.
from converters import kg_to_jin
print(converters.kg_to_jin(100),"斤")
小练习:把之前的排列代码整合成一个模块utils,导入并使用.
主代码
import utils
nums = [4,5,6,7]
maxinum = utils.find_max(nums)
print(maxinum(nums))
print(max(nums))
utils.py
def find_max(number_list):
maxinum = number_list[0]
for number in number_list:
if number > maxinum:
maxinum = number
return maxinum
在这个练习中,用的使maxinum而不是max,这是为了避免与常用函数重名,在python中发生这种情况时,变量名会覆盖原来的函数名,导致max()函数无法使用.
十.packages(包)
随着代码行数的增加,需要导入的模块也越来越多,为了避免一个模块太过巨大,也为了避免文件夹被各种不同的文件塞满,可以使用package将类似的模块打包。
创建一个包的方法:右键建立一个package,里面会有一个__init__.py文件,说明这是一个包.
创建一个.py文件,像一般写模块一样写代码.
Calculate.py如下
def calc_square(number):
print(f"The square of {number} is {number**2}")
def calc_sum(number1,number2):
print(f"The sum of {number1} and"
f" {number2} is {number2+number1}")
导入包中模块,函数的方法如下:
#导入包中的某一个模块
import Mypack.Calculate
Mypack.Calculate.calc_square(10)
#或者这么做
from Mypack import Calculate
Calculate.calc_square(2)
# 导入包中的某一个模块中的某几个函数
from Mypack.Calculate import calc_square,calc_sum
calc_sum(1,1)