我觉着五章一篇文章应该挺合理,总共二十章,完美)
话不多说开始⑧
2.9~2.13 痛改前非的第四天,让我们来康康今天学啥
第 6 章 字典 编程语言里出现这两个字还真挺奇怪,不过我的第一反应是:我超!法典!
在Python中,字典是一系列键——值对 。每个键 都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将 任何Python对象用作字典中的值。
在Python中,字典用放在花括号{} 中的一系列键—值对表示,就像这样
alien_0 = {'color': 'green', 'points': 5}
冒号前是键,后是值,键——值对用冒号隔开,键——值对之间用逗号隔开
想要访问字典中的值,可依次指定字典名和放在方括号内的键,用中括号
print(alien_0['color']) green
字典是一种动态结构,可随时在其中添加键—值对。(这话说的,列表不也这样吗(
alien_0['x_position'] = 0alien_0['y_position'] = 25
像这样输一个原来没有的键再赋上值即可
值得一提的是,我手里的教材告诉我添加是不按顺序来的,然鹅我手里的python3.10告诉我其实字典是按顺序添加的(
看得出来字典和列表是有相似之处的,比如空字典就是赋{},修改字典还是赋值,删键——值对也是,不过改和删都得指定好键
如果你为了美观想在字典里整回车,注意一下格式
favorite_languages = {'jen': 'python', #缩进4格'sarah': 'c', 'edward': 'ruby', 'phil': 'python', #最后的逗号可有可无}
print后面也可以有
print("Sarah's favorite language is " + #加号后回车 favorite_languages['sarah'].title() + #缩进4格".")
遍历字典同样使用for循环,但是有多种情况
遍历所有的键——值对:使用方法item()
for key, value in user_0.items(): print("Key: " + key)#key和value都是变量 print("Value: " + value)Key: last Value: fermi
当然,你也不一定键值两个都要打出来…
遍历字典中的所有键:使用方法keys(),但其实遍历字典时,会默认遍历所有的键,所以这个".keys()"可有可无。
for name in favorite_languages.keys():
不过keys()不止遍历,它会返回一个包含所有键的列表,因此可以对其进行只有再列表里才能做的判断
if 'erin' not in favorite_languages.keys():
如果想要按某种顺序遍历键,可以用sorted()函数对返回的列表处理
for name in sorted(favorite_languages.keys()):
遍历字典中的所有值:使用方法values(),它会返回一个值列表
如果想要剔除重复项可使用函数set(),它把列表变成没有重复项,和列表类似的集合)
套娃嵌套:在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。
看完了,难以言表,连夜去蚌埠安家罢
第 7 章 用户输入和 while 循环 您瞧瞧,这不是老熟人吗)
函数input():函数input() 让程序暂停运行,等待用户输入一些文本。 获取用户输入后,Python将其存储在一个变量中,以方便你使用。其中括号内的是参数,即输入的提示
运算符**+=** 在存储在prompt 中的字符串末尾附加一个字符串
prompt = "If you tell us who you are, we can personalize the messages you see." prompt += "nWhat is your first name? "print(prompt)If you tell us who you are, we can personalize the messages you see、 What is your first name?
使用函数int()来获取数值输入
在python2.7中…
while循环:
while XXXXXX:XXXX
再次说明一下,a += 1是a = a + 1的缩写
标志:定义一个变量,用于判断整个程序是否处于活动状态。如果True就好说,要是False就不干了,多说无益,上
active = True #注意这!while active: #注意这!message = input(prompt) if message == 'quit': active = False #注意这!else:print(message)
break:简简单单5个字母,轻松退出循环
continue:断掉后面的直接从判断条件那开始
但在for 循环中不应修改列表,否则将导致Python难以跟踪其中的元素。(我不懂,听他的就对了)
简简单单做个作业
sandwich_orders=['superhot','pastrami','pastrami','veryhot','pastrami','hhh']finished_sandwiches=[]print('五香味没了')while 'pastrami'in sandwich_orders: sandwich_orders.remove('pastrami')while sandwich_orders: print("finished") finished_sandwiches.append(sandwich_orders.pop())print(*finished_sandwiches)没了finishedfinishedfinishedhhh veryhot superhot
还挺少
第 8 章 函数鸡冻任鑫的函数环节,可以diy函数力!
定义函数:上
def greet_user(): #定义"""显示简单的问候语"""#文档字符串,注释用print("Hello!")
像函数传递信息:在上述greet_user(XXX)括号内添加一个变量名,执行函数时提供一个变量值给这个变量XXX即可,像这样greet_user('jesse')
形参和实参:上段中,XXX这个变量名是形参,而’jesse’是实参
传递实参:函数调用时会有不同参数
位置实参:def describe_pet(animal_type, pet_name):,基于顺序的参数
关键字实参:在调用函数时直接赋值describe_pet(animal_type='hamster', pet_name='harry'),这样就不用管什么顺序了(但是感觉好麻烦)
给形参设定默认值:在定义函数时动手脚,像这样:def describe_pet(pet_name, animal_type='dog'):,此时如果只给一个参数则会被解读为位置实参
返回值:顾名思义,可使用return 语句将值*[HTML]:可以是任何类型。返回到调用函数的代码行
Python将非空字符串解读为True,和列表和字典同理
传递任意数量的形参:形参名*toppings 中的星号让Python创建一个名为toppings 的空元组,并将收到的所有值都封装到这个元组中。(toppings没别的意思)
那么怎么输入任意数量的关键字实参呢?形参**user_info 中的两个星号让Python创建一个名为user_info 的 空字典,并将收到的所有键—值对都封装到这个字典中。不过键值对的输入方式和我们想的不一样:location='princeton'键没有单引号,中间用的也是等号而不是冒号(我完全无法理解,照做就是了)
模块:函数的优点之一是,使用它们可将代码块与主程序分离。通过给函数指定描述性名称,可让主程序容易理解得多。你还可以更进一步,将函数存储在被称为模块的独立文件中, 再将模块导入到主程序中。import 语句允许在当前运行的程序文件中使用模块中的代码。 在调用函数之前import 模块名,调用时会有模块名.函数() (也就是说模块就是一个.py后缀的函数库?)
Python读取这个文件时,代码行import pizza 让Python打开文pizza.py,并将其中的所有函数都复制到这个程序中。你看不到复制的代码,因为这个程序运行时,Python在幕后复制这些代码。你只需知道,在making_pizzas.py中,可以使用pizza.py中定义的所有函数。那你tm要那一个小点点干嘛
如果想要导入特定的函数,from 模块名 import 函数名, function_0, function_1, function_2。若使用这种语法,调用函数时就无需使用句点。由于我们在import 语句中显式地导入了函数make_pizza() ,因此调用它时只需指定其名称。
使用星号(* )运算符可让Python导入模块中的所有函数:from pizza import *
注:import 语句中的星号让Python将模块pizza 中的每个函数都复制到这个程序文件中。由于导入了每个函数,可通过名称来调用每个函数,而无需使用句点表示法。然而,使用并非自己编写的大型模块时,最好不要采用这种导入方法:如果模块中有函数的名称与你的项目中使用的名称相同,可能导致意想不到的结果:Python可能遇到多个名称相同的函 数或变量,进而覆盖函数,而不是分别导入所有的函数。 最佳的做法是,要么只导入你需要使用的函数,要么导入整个模块并使用句点表示法。这能让代码更清晰,更容易阅读和理解。这里之所以介绍这种导入方法,只是想让你在阅读别人编写的代码时,如果遇到类似于下面的import 语句,能够理解它们。
使用as给函数指定别名:例:在import 语句中使用from 模块名 import make_pizza as mp ,关键字as 将函数重命名为你提供的别名。
还可以给模块指定别名:import pizza as p
作者的建议:
如果程序或模块包含多个函数,可使用两个空行将相邻的函数分开
所有的import 语句都应放在文件开头,唯一例外的情形是,在文件开头使用了注释来描述整个程序。
应给函数指定描述性名称,且只在其中使用小写字母和下划线。描述性名称可帮助你和别人明白代码想要做什么。给模块命名时也应遵循上述约定。
每个函数都应包含简要地阐述其功能的注释,该注释应紧跟在函数定义后面,并采用文档字符串格式。
给形参指定默认值时,等号两边不要有空格:
第 9 章 类 又是看上去非常高级的东西~似乎是模拟用的
创建和使用类:比如创建Dog类,模拟所有狗。类名应采用驼峰命名法 ,即将类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名都采用小写格式,并在单词之间加上下划线。
class Dog(): #从空白创建一个类"""一次模拟小狗的简单尝试"""def __init__(self, name, age):#定义方法/函数"""初始化属性name和age"""self.name = name#获取存在形参name 中的值,并将其存到变量name 中,然后该变量被关联到当前创建的实例。self.age = agedef sit(self):"""模拟小狗被命令时蹲下"""print(self.name.title() + " is now sitting.")def roll_over(self):"""模拟小狗被命令时打滚"""print(self.name.title() + " rolled over!")
看不懂吗?我也看不懂!
方法__init__():类中的函数称为方法;你前面学到的有关函数的一切都适用于方法。方法__init__()是一个特殊的方法,每当你根据Dog 类创建新实例时,Python都会自动运行它。而两个下划线是为了防止与普通方法产生冲突。
此方法包括三个形参,其中形参self 必不可少,还必须位于其他形参的前面。创建Dog实例时会自动传入实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。我们创建Dog 实例时,Python将调用Dog 类的方法__init__()。我们将通过实参向Dog() 传递名字和年龄;self 会自动传递,因此我们不需要传递它。每当我们根据Dog 类创建实例时,都只需给最后两个形参(name 和age )提供值。<原谅看不懂的我只能复制粘贴>
以self 为前缀的变量都可供类中的所有方法使用~~(即公交车)~~,我们还可以通过类的任何实例来访问这些变量。self.name = name 获取存储在形参name 中的值,并将其存储到变量name 中,然后该变量被关联到当前创建的实例。self.age = age 的作用与此类似。像这样可通过实例访问的变量称为属性。
根据类创建实例:
class Dog():--snip-- #省略的在上面my_dog = Dog('willie', 6) #创建实例并传递参数name和ageprint("My dog's name is " + my_dog.name.title() + ".")print("My dog is " + str(my_dog.age) + " years old.")
访问属性:my_dog.name。句点表示法在Python中很常用,这种语法演示了Python如何获悉属性的值。在Dog 类中引用这个属性时,使用的是self.name ,self.name是“名字”而不是特定的名字。
调用方法:使用句点表示法来调用Dog 类中定义的任何方法。
给属性(不是形参)指定默认值:很简单,在初始化时加入self.属性名 = 初始值。(不过从形参那直接动手效果应该一样)
修改属性的值:
通过实例直接改:实例名.属性 = XX通过方法改:把上面那个修改式搬到一个新的方法里通过方法对属性里的值递增:简单的 += 。加的值是方法的参数。
如果你要编写的类是另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法。
创建子类时,父类必须包含在当前文件中,且位于子类前面。定义子类时,必须在括号内指定父类的 名称。方法__init__() 接受创建Car 实例所需的信息。继承是这样的:
class ElectricCar(Car):"""电动汽车的独特之处"""def __init__(self, make, model, year):"""初始化父类的属性"""super().__init__(make, model, year)
super() 是一个特殊函数,帮助Python将父类和子类关联起来。这行代码让Python调用ElectricCar 的父类的方法__init__() ,让ElectricCar 实例包含父类的所 有属性。父类也称为超类(superclass),名称super因此而得名。
给子类添加属性:直接加个属性添上初始值:self.battery_size = 70
重写父类的方法:def fill_gas_tank():像这样直接删掉self
可以将大型类拆分成多个协同工作的小类:self.属性名 = 类名()加上类1名.属性.类的方法名()
导入类:可以将类存至模块里。导入方法和函数一致,不多赘述
你甚至可以在一个模块导入另一个模块,玩上多米诺骨牌
学会借助外力,白嫖使用别人的库