这些笔记都是手敲到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小白的读书笔记相关推荐

  1. 廖雪峰python教程整理笔记_python小白01廖雪峰python教程笔记

    高级特性 切片:前10个数,每两个取一个: L[:10:2]:[0, 2, 4, 6, 8] 可迭代对象的判断: isinstance('abc', Iterable) list变成索引-元素对:fo ...

  2. python源码笔记_python源码学习笔记(一)

    (一)python对象的基本实现 众所周之,python是个极其简洁高效的脚本语言,其设计思维之简洁,编写之简单,已成公认.想着深入了解内部机制,探索一下源代码,并记录一些东西.诚然,人总是健忘的,因 ...

  3. python随机数生成十个数字的成语_python小白也可以分分钟爬取微博数据,并生成有个性的词云,你get到了吗?...

    Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理 ...

  4. python爬虫源码附注解_Python小白写的三个入门级的爬虫(附代码和注释)

    Python小白写的三个入门级的爬虫(附注释) 写在前面的话:作者目前正在学习Python,还是一名小白,所以注释可以会有些不准确的地方,望谅解. 这三个小爬虫不是很难,而且用处可能也不大,主要还是锻 ...

  5. python定义函数的组成部分有_Python文档学习笔记(4)--定义函数

    定义函数 关键字 def 引入函数的定义.其后必须跟有函数名和以括号标明的形式参数列表.组成函数体的语句从下一行开始,且必须缩进. 执行 一个函数会引入一个用于函数的局部变量的新符号表. 因此,在函数 ...

  6. python语句x 3 3执行_Python 3.x 学习笔记--杂

    在交互式环境中,编译器会有一个小整数池的概念,会把(-5,256)间的数预先创建好,而当a和b超过这个范围的时候,两个变量就会指向不同的对象了,因此地址也会不一样, http://www.runoob ...

  7. python源码笔记_python源码学习笔记(二)

    (二) python 继承和多态 这非常类似C++的功能,只不过是是在C基础上开发的.由上一节知,python的所有对象的基础都是PyObject,所以例如创建一个PyIntObject对象,是通过P ...

  8. python第三周笔记_Python第四周 学习笔记(1)

    函数 Python的函数没有return语句,隐式会返回一个None值 函数是可调用的对象,callable() 函数参数 参数调用时传入的参数要和定义的个数相匹配(可变参数例外) 位置参数 def ...

  9. python入门基本笔记_Python入门基础知识笔记

    点击蓝字"python教程"关注我们哟! 冯诺依曼架构 控制器 运算器 存储器 输入设备 (I) 输出设备 (O) CPU--控制器,运算器 # 运算器只与内存交换数据 内存--存 ...

最新文章

  1. 我对bgwriter.c 与 guc 关系的初步理解
  2. u3d:强大的dotween。使用dotween处理延时问题,最最最最简单的办法
  3. 干煸线椒的做法_美食:农家蒸土鸡,剁椒梅鲚鱼干,干煸茶树菇,芹菜炒牛肉的做法...
  4. python离线语音识别_Python实现语音识别和语音合成功能
  5. 实现WebSocket和WAMP协议的开源库WampSharp
  6. Linux之ssh无密码登录
  7. TSCLIB.DLL函式库使用说明
  8. win7浏览器主页修改不过来_win7无法修改ie浏览器主页的解决方法
  9. php中的m方法的区别吗,php中的M方法
  10. 怎么教你如何查看电脑的蓝牙版本【解决方案】
  11. 【已解决】 Unable to attach or mount volumes: unmounted volumes
  12. php编写解一元一次方程,解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序?...
  13. matlab+GMT 画图操作——在画图区域-R外进行图例文字标注
  14. 音视频技术开发周刊 | 246
  15. 朱萧木首谈独立创业,与罗老师总会相逢
  16. 《每天五分钟冲击python基础之字符串练习题》(七)
  17. 三轴可编程运动控制程序,支持信捷XDM系列PLC 信捷TG765触摸屏
  18. Dreamweaver网页设计与制作100例 餐饮主题简洁日式料理餐饮网页设计(4页)HTML+CSS+JavaScript
  19. Oracle存储过程调试
  20. (二)OSG初学者入门基础教程

热门文章

  1. 我的编程之路:网编到全栈的漫长路
  2. 基于 SWTBot 进行 Eclipse GUI 自动化测试
  3. 使用百度媒体云视频解决方案实现html5视频播放功能
  4. jQuery Unveil – 另一款非常轻量的延迟加载插件
  5. .net 引用Com组件的几种方案
  6. 一企业彻底实现金融风险数字化,节约人力超4000小时
  7. 2019年总结人工智能未来发展趋势
  8. C#2005中如何把unicode编码的数字转化为EBCDIC编码
  9. 比较完善的是vmware Fusion和Parallels
  10. 给做IT的一点心理安慰