python可以这样学读书笔记_Python小白的读书笔记
这些笔记都是手敲到EverNote上的,为书中1至9章的内容,都是很基础的知识,没事儿的时候拿来浏览一下。当然在笔记中,可以用一些高亮的颜色来标识重点,我把它copy过来,高亮的标识已经不在了!
变量和简单数据类型
变量名应既简短又具有描述性,name_length比length_of_persons_name好;
慎用小写字母l和大字字母O,可能被错看成数字1和0;
字符串的几个方法:name.title()、name.upper()、name.lower();
字符串还有哪些方法?
使用+号合并字符串的方法称为拼接;
空白泛指任何非打印字符,如空格、制表符和换行符(\t \n),可使用空白来组织输出,以使其更易读;
字符串删除空白,lstrip(),rstrip(),strip();
SyntaxError语法错误是最不具体的错误类型,因此可能难以找出并修复;
空格不影响Python计算表达式的方式;
使用str()避免类型错误;
不要企图编写完美无缺的代码,先编写行之有效的代码,再决定是对其做进一步修改,还是转而去编写新代码;
列表简介
列表由一系列按特定顺序排列的元素组成,是有序集合;
给列表指定一个表示复数的名称(letters、names);
索引从0而不是1开始,这与列表操作的底层实现相关;
可以首先创建一个空列表,用于后续存储数据;
修改列表元素 motorcycles[0] = 'ducati';
在列表末尾添加元素 motorcycles.append('ducati');
在列表中插入元素 motorcycles.insert(0,'ducati')
使用del语句删除元素 del motorcycles[0];
方法pop()可删除列表末尾的元素,并让你能够接着使用它,popped_motorcycle = motorcycles.pop();术语弹出(pop)源自这样的类比,列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素;
弹出列表中任何位置处的元素 first_owned = motorscycles.pop(0);
被弹出的元素就不再在列表中了;
根据值删除元素 motorcycles.remove('ducati');
永久性修改列表元素的排列顺序 cars.sort(),相反的顺序排列cars.sort(reverse=True);
sorted(cars),sorted(cars,reverse=True) 使用函数对列表进行临时排序;
注意方法和函数的区别;
倒着打印列表 print(cars.reverse()),不是按字母顺序相反的顺序排列列表元素,而只是反转列表元素的排列顺序;
确定列表的长度 len(cars);
IndexError发生索引错误却找不到解决办法,尝试将列表或其长度打印出来;
列表操作
Python根据缩进来判断代码行与前一个代码行的关系;
创建数值列表:
for value in range(1,5):
print(value)
从第一个值开始,不包含第二个值
创建数字列表 numbers = list(range(1,6)),even_numbers = list(range(2,11,2)) 指定步长不断加2;列表解析 squares = [value**2 for value in range(1,11)],表达式为value**2,for循环用于给表达式提供值;
处理列表的部分元素称之为切片;
players = ['charles','martina','michael','florence','eli']
print(players[0:3])
['charles','martina','michael']
print(players[:4])
['charles','martina','michael','florence']
print(players[-3:])
['michael','florence','eli']复制列表
# 使用切片创建1个新的副本,分别独立。
my_foods = ['pizza','falafel','carrot cake']
friends_foods = my_foods[:]
# 2个变量指向同一个列表,未创建新的副本。
my_foods = ['pizza','falafel','carrot cake']
friends_foods = my_foods
元组
列表非常适合用于存储程序运行期间可能变化的数据集,是可以修改的;
不可变的列表被称为元组,Python将不能修改的值称为不可变的;
定义元组 dimensions = (200,50),可以用索引访问其元素;
dimensions[0] = 250,将报错 TypeError:'tuple' object does not support item assignment
虽然不能修改元组的元素,但可以给存储元组的变量赋值 dimensions = (400,100);
如果需要存储的一组值在程序的整个生命周期内都不变,可使用元组;
设置代码格式
PEP 8格式设置指南;
在文档中插入空格而不是制表符;
每行不超过80个字符;
空行不会影响代码运行,但会影响代码可读性;
if语句
每条if语句的核心都是一个值为True或False的表达式,这种表达式被称为条件测试;
一个等号是陈述,两个等号是发问;
Python在检查是否相等时区分大小写;
car = 'Audi' 写函数car.lower()不会修改存储在变量car里的值,不会影响原来的变量;
布尔表达式的结果要么为True,要么为False;
布尔值常用于记录条件,如游戏是否在运行,或用户是否可以编辑网站的特定内容;
在跟踪程序状态或程序中的条件方面,布尔值提供了一种高效的方式;
else语句让你能够指定条件测试未通过时要执行操作;
只想执行一个代码块,Python只执行if-elif-else结构中的一个代码块;
如果要运行多个代码块,就使用一系列独立的if语句;
确定列表不是空的:
requested_toppings = []
if requested_toppings:
pass
字典
字典将相关信息关联起来;
字典中可存储的信息量几乎不受限制;
有存储字典的列表、存储列表的字典、存储字典的字典;
字典是一系列的键-值对;
与键相关联的值可以是数字、字符串、列表及至字典;事实上,可将任何Python对象用作字典的值;
字典是一种动态结构,可随时在其中添加键-值对;
不关心键-值对的添加顺序,而只关心键和值之间的关联关系;
存储用户数据或自动生成大量键-值对时,通常都需要定义一个空字典;
删除键-值对:
alien_0 = {'color':'green','points':5}
del alien_0['points']
# 删除的键-值对将永远消失字典可以存储一个对象的多种信息,也可以存储众多对象的同一种信息;
在最后一个键-值对后面也加上逗号,为添加下行一个键-值对做好准备;
遍历字典所有键-值对:
for key,value in user_0.items():
pass键-值对的返回顺序与存储顺序不同,Python不关心键-值对的存储顺序,只跟踪键和值之间的关联关系;
遍历字典中的所有键:
for name in favorite_languages.keys():
pass遍历字典时默认遍历所有键:
for name in favorite_languages.keys(): 替换为for name in favorite_languages: 输出将不变;显示使用keys()代码更容易理解;按顺序遍历字典中的所有键:
for name in sorted(favorite_languages.key()):
pass
# 使用sorted()函数遍历字典中的所有值:
for name in favorite_languages.values():
pass
# 提取所有值,没有考虑值是否重复通过对包含重复元素的列表调用set(),创建一个集合,可以找出列表中独一无二的元素:
for name in set(favorite_languages.values()):
pass列表中嵌套字典、字典中嵌套列表、字典中嵌套字典;
用户输入
获得用户输入后,将其存储在一个变量中:
message = input("Tell me something: ")
print(message)提示末尾包含一个空格,可将提示与用户输入分开,更清晰;
提示如超过一行,可将提示存储在一个变量中,再传递给函数input(),这样使语句清晰:
prompt = "If you tell us who you are,we can personalize the message you see."
prompt += "\nWhat is your first name? "
name = input(prompt)
print(name)
# 运算符 += 在存储prompt中的字符串末尾附加一个字符串使用int()来获取数值输入;
求模运算符 % 用来取余数;
while循环
不断运行,直到指定的条件不满足;
current_number = 1
while current_number <= 5:
print(current_number)
current_number += 1break 退出循环;
continue 返回到循环开头重新开始,并根据条件测试结果决定是否继续执行循环;
遍历列表的同时对其修改,可使用while循环;
函数需要在程序中多次执行同一项任务;
文档字符用三引号括起;
形参是函数完成其工作所需的一项信息;
实参是调用函数时传递给函数的信息;
实参传递给函数,这个值被存储在形参中;
函数定义可能包含多个形参,因此函数调用中也可能包含多个实参;
位置实参,要求实参的顺序与形参顺序相同;
关键字实参,每个实参由变量名和值组成,即名称-值对,无需考虑实参顺序,务必准确指定函数定义中的形参名;
还可以使用列表和字典;
默认值,调用函数时如给形参提供了实参,将使用提供的实参值,否则将使用形参的默认值;
使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参,即默认值形参放在最后:
def describe_pet(pet_name,animal_type='dog'):
pass
describe_pet('willie')
# Python依然将这个实参视为位置参数可以混合使用位置实参、关键字实参和默认值;
def describe_pet(pet_name,animal_type='dog'):
pass
基于这种定义,在任何情况下都必须给pet_name提供实参;指定该实参的时可以使用位置方式,也可以使用关键字方式,以下对这个函数的调用都可行(关键在于形参和实参的对应):
# 一条名为Willie的小狗
describe_pet('Willie')
describe_pet(pet_name='Willie')
# 一只名为Harry的仓鼠
describe_pet('Harry', 'hamster')
describe_pet(pet_name='Harry', animal_type='hamster')
describe_pet(animal_type='hamster' ,pet_name='Harry')函数并非总是直接显示输出,它可以处理一些数据,并返回一个或一组值;
调用返回值的函数时,需要提供一个变量,用于存储返回值;
让实参变成可选
def get_formatted_name(first_name,last_name,middle_name=''):
passPython将非空字符串解读为True;
返回字典
def build_person(first_name,last_name):
person = {'first':first_name,'last':last_name}
return person向函数传递列表
def great_users(names):
for name in names:
msg = "Hello, " + name.title() + "!"
print(msg)在函数中修改列表,对列表所做的任何修改都永久性的,这样能够高效地处理大量数据;
每个函数只负责一项具体工作;
总是可以在一个函数中调用另一个函数;
向函数传递列表的副本,这样函数所做的任何修改都只影响副本,而丝毫不影响原件;
function_name(list_name[:])
# 切片表示法[:]创建列表的副本除非有充分理由需要传递副本,否则还是应该将原始列表传递函数,避免花时间和内存创建副本,从而提高效率,处理大型列表时尤其如此。
传递任意数量的实参(预先不知道函数需要接受多少个实参)
def make_pizza(*toppings):
print(toppings)
make_pizza('mushrooms','green peppers','extra cheese')
# 形参名*topping中的星号让Python创建一个名为toppings的空元组,将实参封装到一个元组中;结合使用位置实参和任意数量实参,必须在函数定义中将接纳任意数量的实参的形参放在最后;Python先匹配位置实参和关键字实参,再将余下的实参收集到最后一个形参中。
def make_pizza(size,*toppings):
pass使用任意数量的关键字实参(预先不知道传递给函数什么样的信息)
这种情况下,可将函数编写成能接受任意数量的键-值对,调用语句提供了多少就接受多少;
def build_profile(first, last, **user_info):
"""Build a dictionary containing everything we know about a user."""
profile = {}
profile['first_name'] = first
profile['last_name'] = last
forkey, value inuser_info.items():
profile[key] = value
returnprofile
user_profile = build_profile('albert', 'einstein',
location='princeton',
field='physics')
print(user_profile) # 返回一个字典
将函数存储在模块中函数的优点之一可将代码块与主程序分离;
将函数存储在被称为模块的独立文件中,再将模块导入到主程序中;
将函数存储在独立文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上;
模块是扩展名为.py的文件,包含要导入到程序中的代码;
import让Python打开文件,并将其中的所有函数都复制到这个程序中,看不到复制的过程;
导入整个模块的调用方法,module_name.function_name();
导入特定函数,from module_name import function_name,显式地导入函数,调用时只需要指定其名称;
使用as给函数指定别名,from pizza import make_pizza as mp;
使用as给模块指定别名,import pizza as p;
导入所有函数,from pizza import *,最好不要采用这种方法;
要么只导入你需要使用的函数,要么导入整个模块并使用句点表示法;
函数编写指南给函数指定描述性名称,使用小写字母和下划线;
使用文档字符串简要注释;
给形参指定默认值时,等号两边不要有空格;
代码长度不要超过79字符;
使用2个空行将相邻的函数分开;
import应放在文件开头,除非文件开头使用了注释来描述程序;
类表示现实世界中的事物和情景的类;
一大类对象都有通用的行为;
根据类来创建对象被称为实例化;
class Dog():
"""A simple attempt to model a dog."""
def__init__(self, name, age):
"""Initialize name and age attributes."""
self.name = name
self.age = age
def sit(self):
"""Simulate a dog sitting in response to a command."""
print(self.name.title() + " is now sitting.")
def roll_over(self):
"""Simulate rolling over in response to a command."""
print(self.name.title() + " rolled over!")
my_dog = Dog('willie', 6)
your_dog = Dog('lucy', 3)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")
my_dog.sit()
print("\nMy dog's name is " + your_dog.name.title() + ".")
print("My dog is " + str(your_dog.age) + " years old.")
your_dog.sit()
首字母大写的名称指的是类;
类中的函数称为方法;
__init__()是一个特殊方法,创建类实例时自动运行;
自动传递,创建实例时自动传入实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法;(自己的理解是:让实例与类创建关联)
self为前缀的变量都可供类中的所有方法使用;
my_dog = Dog('willie', 6)
# __init__()并未显式地包含return语句,但自动返回一个表示这条小狗的实例,并存储在变量my_dog中
class Car():
"""A simple attempt to represent a car."""
def__init__(self, manufacturer, model, year):
"""Initialize attributes to describe a car."""
self.manufacturer = manufacturer
self.model = model
self.year = year
self.odometer_reading = 0
类中每个属性都必须有初始值,哪怕这个值是0或空字符串;
如是在__init__()内指定初始值,就无需包含为它提供初始值的形参;
类编写好后,你的大部分时间都将花在使用根据类创建的实例上;
一个类继承另一个类,将自动获得另一个类的所有属性和方法;
子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法;
创建子类时,父类必须包含在当前文件中,且位于子类前面;
class Car():
pass
class Electric(Car):
"""电动汽车的独特之处"""
def __init__(self,make,model,year):
"""初始化父类的属性"""
super().__init__(make,model,year)
给子类定义属性和方法;
重写父类方法;
使用继承时,可让子类保留从父类那里继承而来的精华,并剔除不需要的糟粕;
将实例用作属性;
现实世界的建模方法并没有对错之分,有些方法效率高,但要找出来需要经过一定的实践;
编写出高效、准确的代码,都是经过一定的过程;
先找出让你能够编写出可行代码的方式,再尝试让代码更为组织有序,即先正确运行,再组织代码;
类代码风格驼峰命名法
每个模块、类都应包含一个文档字符串;
在模块中,可使用2个空行分隔类;在类中,可使用1个空行来分隔方法;
需要同时导入标准模块和自己编写的模块时,先导入标准模块,再添加1个空行,然后导入自己编写的模块;
python可以这样学读书笔记_Python小白的读书笔记相关推荐
- 廖雪峰python教程整理笔记_python小白01廖雪峰python教程笔记
高级特性 切片:前10个数,每两个取一个: L[:10:2]:[0, 2, 4, 6, 8] 可迭代对象的判断: isinstance('abc', Iterable) list变成索引-元素对:fo ...
- python源码笔记_python源码学习笔记(一)
(一)python对象的基本实现 众所周之,python是个极其简洁高效的脚本语言,其设计思维之简洁,编写之简单,已成公认.想着深入了解内部机制,探索一下源代码,并记录一些东西.诚然,人总是健忘的,因 ...
- python随机数生成十个数字的成语_python小白也可以分分钟爬取微博数据,并生成有个性的词云,你get到了吗?...
Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理 ...
- python爬虫源码附注解_Python小白写的三个入门级的爬虫(附代码和注释)
Python小白写的三个入门级的爬虫(附注释) 写在前面的话:作者目前正在学习Python,还是一名小白,所以注释可以会有些不准确的地方,望谅解. 这三个小爬虫不是很难,而且用处可能也不大,主要还是锻 ...
- python定义函数的组成部分有_Python文档学习笔记(4)--定义函数
定义函数 关键字 def 引入函数的定义.其后必须跟有函数名和以括号标明的形式参数列表.组成函数体的语句从下一行开始,且必须缩进. 执行 一个函数会引入一个用于函数的局部变量的新符号表. 因此,在函数 ...
- python语句x 3 3执行_Python 3.x 学习笔记--杂
在交互式环境中,编译器会有一个小整数池的概念,会把(-5,256)间的数预先创建好,而当a和b超过这个范围的时候,两个变量就会指向不同的对象了,因此地址也会不一样, http://www.runoob ...
- python源码笔记_python源码学习笔记(二)
(二) python 继承和多态 这非常类似C++的功能,只不过是是在C基础上开发的.由上一节知,python的所有对象的基础都是PyObject,所以例如创建一个PyIntObject对象,是通过P ...
- python第三周笔记_Python第四周 学习笔记(1)
函数 Python的函数没有return语句,隐式会返回一个None值 函数是可调用的对象,callable() 函数参数 参数调用时传入的参数要和定义的个数相匹配(可变参数例外) 位置参数 def ...
- python入门基本笔记_Python入门基础知识笔记
点击蓝字"python教程"关注我们哟! 冯诺依曼架构 控制器 运算器 存储器 输入设备 (I) 输出设备 (O) CPU--控制器,运算器 # 运算器只与内存交换数据 内存--存 ...
最新文章
- 我对bgwriter.c 与 guc 关系的初步理解
- u3d:强大的dotween。使用dotween处理延时问题,最最最最简单的办法
- 干煸线椒的做法_美食:农家蒸土鸡,剁椒梅鲚鱼干,干煸茶树菇,芹菜炒牛肉的做法...
- python离线语音识别_Python实现语音识别和语音合成功能
- 实现WebSocket和WAMP协议的开源库WampSharp
- Linux之ssh无密码登录
- TSCLIB.DLL函式库使用说明
- win7浏览器主页修改不过来_win7无法修改ie浏览器主页的解决方法
- php中的m方法的区别吗,php中的M方法
- 怎么教你如何查看电脑的蓝牙版本【解决方案】
- 【已解决】 Unable to attach or mount volumes: unmounted volumes
- php编写解一元一次方程,解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序?...
- matlab+GMT 画图操作——在画图区域-R外进行图例文字标注
- 音视频技术开发周刊 | 246
- 朱萧木首谈独立创业,与罗老师总会相逢
- 《每天五分钟冲击python基础之字符串练习题》(七)
- 三轴可编程运动控制程序,支持信捷XDM系列PLC 信捷TG765触摸屏
- Dreamweaver网页设计与制作100例 餐饮主题简洁日式料理餐饮网页设计(4页)HTML+CSS+JavaScript
- Oracle存储过程调试
- (二)OSG初学者入门基础教程