<Notes>Python回炉笔记--基础语法入门

Python回炉笔记--基础语法入门

  • 前言
    • Chapter 1 起步
      • Notes
      • Q&A
    • Chapter 2 变量和简单数据类型
      • Notes
      • Q&A
    • Chapter 3 列表简介
      • Notes
    • Chapter 4 操作列表
      • Notes
    • Chapter 5 If语句
      • Notes
    • Chapter 6 字典
      • Notes
      • Q&A
    • Chapter 7 用户输入和while循环
      • Notes
      • Q&A
    • Chapter 8 函数
      • Notes
      • Q&A
    • Chapter 9 类
      • Notes
      • Q&A
    • Chapter 10 文件和异常
      • Notes
    • Chapter 11 测试代码
      • Notes
  • 后言
  • 参考资料

前言

因最近工作需要,所以打算重新看一遍python;以前只是零零碎碎的看了一些教程,包括书籍、官方文档、视频,现在打算以《Python编程:从入门到实践》这本书重新过一下;博客主要记录一些重点和Q&A。

Chapter 1 起步

Notes

<Notes>Python回炉笔记--基础语法入门_第1张图片

这是Python官方给的IDE,是一个非常轻量级的编辑工具,大小只有20-30M,相应的功能也非常少,这里我们使用pycharm
如果想在pycharm上运行交互式shell,需要安装相关插件,或者直接在cmd下运行python交互;
对于ubuntu系统,旧版的ubuntu默认安装python2,新版的ubuntu20.04默认安装python3(香)。

Q&A

Q:Python中单引号’和双引号”有什么区别
A:Python中单引号和双引号是一样的

message = "One of Python's strengths is its diverse community."   #true
print(message)
message = 'One of Python's strengths is its diverse community.'   #error
print(message)
message = 'One of Python"s strengths is its diverse community.'	  #true
print(message)
message = "One of Python"s strengths is its diverse community."   #error
print(message)
message = 'One of Python"s"strengths is its diverse community.'
#例如这里,想要输出一对双引号可以用单引号操作

正确使用单引号和双引号避免错误

Q:Python语言的历史发展
Q:相较于Python2,Python3做了哪些改进
Q:Python和C++语言的区别

Chapter 2 变量和简单数据类型

Notes

变量大小写

name = "ada lovelace"
print(name.title())  ##output:Ada Lovelace  首字母大写
print(name.upper())	 #output:ADA LOVELACE   全变成大写
print(name.lower())  #output:ada lovelace   全变成小写

删除空白

favorite_language = ' python '
print(favorite_language.rstrip())  #删除后空格
print(favorite_language.lstrip())  #删除前空格
print(favorite_language.strip())   #前后空格均删除

类型转换

age =23
b=str(age)     #age仍为int,b为string
print(24/3)   #output:8.0
print(int(24/3))    #output:8

Python之禅 python编程原则
<Notes>Python回炉笔记--基础语法入门_第2张图片
关于注释
‘’’
在程序开头加注释,姓名和当前日期,再用一句话阐述程序的功能。
‘’’

Q&A

Q:Python语法风格及命名规范
A:python 规范:PEP 8 ;缩进:四个空格;每行都不要超过80字符
代码规范:在条件测试的格式设置方面,PEP 8提供的唯一建议是,在诸如== 、>= 和<= 等比较运算符两边各添加一个空格,例如,if
age < 4: 要比if age<4: 好。
PEP 8: https://www.python.org/dev/peps/pep-0008/.

Chapter 3 列表简介

Notes

列表:由一系列按特定顺序排列的元素组成;
注意点:
1、用方括号([] )来表示列表,并用逗号来分隔其中的元素;
2、列表的索引从0而不是1开始;
3、Python为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1 ,可让Python返回最后一个列表元素:同理-2是倒数第二个,-3是倒数第三个;
4、列表是动态的。

修改列表内容

#添加元素
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.append('ducati')     #将元素添加在列表末尾

#插入元素
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')     output:['ducati', 'honda', 'yamaha', 'suzuki']
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(5, 'ducati')   #大于2都会放在末尾

#删除元素
motorcycles = ['honda', 'yamaha', 'suzuki']
del motorcycles[1]     #删除第二个元素

motorcycles = ['honda', 'yamaha', 'suzuki']
popped_motorcycle = motorcycles.pop()     #pop挤压出最后一个元素 suzuki 给popped_motorcycle
motorcycles = ['honda', 'yamaha', 'suzuki']
first_owned = motorcycles.pop(0)   #pop出任意位置的元素,并赋值给first_owned

motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
motorcycles.remove('ducati')   #根据值删除元素,多个只会删除第一个

组织列表

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()    #对列表cars进行首字母排序
#cars.sort(reverse=True)   #或者这样 反序排列

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(sorted(cars))  #临时排序,只体现当前一次

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.reverse()   #元素顺序反转

列表长度

cars = ['bmw', 'audi', 'toyota', 'subaru']
len(cars)   #output:4

Chapter 4 操作列表

Notes

遍历列表

#for循环遍历
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician)
output:
alice
david
carolina
#Q:这里为什么自动换行了?

数值列表(列表中内容为数字)

a = range(1,5)		#range不包含结束的那个数值
print(a)    #output:range(1, 5)    这里a到底是什么
#range(2,11,2)  最后一个2代表步长

#使用range() 创建数字列表
a = list(range(1,5))
print(a)     #output:[1, 2, 3, 4]

数值数列统计

digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(min(digits))
print(max(digits))   
print(sum(digits))

列表解析

squares = [value**2 for value in range(1,11)]
print(squares)   #这里for循环没有冒号,工程中常见语法形式
#output:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

切片–处理列表的部分元素

#创建切片
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])   #和range函数一样,不包含最后一位

print(players[:4])  #没指明就是从头开始

print(players[-3:])  #返回最后三个

复制列表

#复制的话就有一个问题,两个列表是否是指向同一个地址空间

my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]      #这样的话是两个列表

my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods   #这样直接赋值的话是一个列表(同一个地址空间)

元组–不可修改的列表

#定义元组  元组是使用圆括号来标识的。
 dimensions = (200, 50) 
 
dimensions = (200, 50)
dimensions = (400, 100)  #这种重新对一个数组进行赋值是不会错的

Chapter 5 If语句

Notes

检查特定值是否包含在列表中

requested_toppings = ['mushrooms', 'onions', 'pineapple']
print('mushrooms' in requested_toppings)    #output:True
print('pepperoni' in requested_toppings)	#output:False
#另外检查一个元素不在列表里可以用 not in

if语句语法结构

if conditional_test:
	do something
elif conditional_test:
	do something
else:
	do something

Chapter 6 字典

Notes

字典:够将相关信息关联起来
基本特征:
1、字典 是一系列键—值对 。每个键 都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值;
2、字典用放在花括号{} 中的一系列键—值对表示,如:alien_0 = {‘color’: ‘green’, ‘points’: 5}
3、键和值之间用冒号分隔,而键—值对之间用逗号分隔。
字典基本语法

#访问键中的值
alien_0 = {
     'color': 'green'}
print(alien_0['color'])     output: green

#添加键值对
alien_0 = {
     'color': 'green', 'points': 5}    #直接添加新的键值对
alien_0['x_position'] = 0
alien_0['y_position'] = 25

#修改值
alien_0 = {
     'color': 'green'}    #直接复制修改
alien_0['color'] = 'yellow'

#删除键值对
alien_0 = {
     'color': 'green', 'points': 5}
del alien_0['points']    

遍历字典

 #遍历所有的键—值对
user_0 = {
     'username': 'efermi','first': 'enrico','last': 'fermi',}
for key, value in user_0.items():   
	do something

#遍历字典中的所有键     键重复的时候不重复输出
favorite_languages = {
     'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python',}
for name in favorite_languages.keys():  #= for name in favorite_languages: 
	do something 

#排序遍历
for name in sorted(favorite_languages.keys()):

#遍历字典中的所有值     值重复的时候不重复输出
for language in set(favorite_languages.values()):

嵌套

#在列表中嵌套字典
alien_0 = {
     'color': 'green', 'points': 5}
alien_1 = {
     'color': 'yellow', 'points': 10}
alien_2 = {
     'color': 'red', 'points': 15}
aliens = [alien_0, alien_1, alien_2]

#在字典中嵌套列表    字典里的值是可以为列表的
pizza = {
     'crust': 'thick','toppings': ['mushrooms', 'extra cheese'],}

#在字典里嵌套字典   字典里的值是可以是 字典的
users = {
     
'aeinstein': {
     'first': 'albert','last': 'einstein','location':'princeton',},
'mcurie': {
     'first': 'marie','last': 'curie','location': 'paris',},
}

Q&A

Q:可以反向用值找键吗?
A:见遍历;
Q:每个键是不是必须对应一个值,能否对应多个值?
Q:可以直接修改键吗?
Q:键名是否可以重复?
A:可以;
Q:字典可以合并吗?

Chapter 7 用户输入和while循环

Notes

用户输入函数input()

message = input("Tell me something, and I will repeat it back to you: ")
print(message)      #默认为字符串

message = int(message)  #如需确定接受整形,可强制类型转换

while函数

#简单语法
while conditional_test:
	do something

#break    立即退出while 循环,不再运行循环中余下的代码
while True:
	city = input(prompt)
	if city == 'quit':
		break
	else:
		print("I'd love to go to " + city.title() + "!")


#contine  结束本次循环,开始下一次循环
current_number = 0
while current_number < 10:
    current_number += 1
    if current_number % 2 == 0:
        continue
    print(current_number)
#若程序不小心陷入无限循环下,ctrl+c

#遍历列表
unconfirmed_users = ['alice', 'brian', 'candace']
while unconfirmed_users:
	do something

#遍历寻找列表元素删除
pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
while 'cat' in pets:
	pets.remove('cat')

Q&A

Q:有只提示,不进行输出的函数吗

input("hello,world!")   #直接这样还是会等待输出

print("Give me two numbers, and I'll divide them.")  #直接print

Chapter 8 函数

Notes

#函数简单语法
def function_name():
	do something
function_name()  #调用
#p.s.
def greet_user():
    print("Hello!")
greet_user()

def greet_user(username):  #传递信息 

形参:—函数完成其工作所需的一项信息
实参:调用函数时传递给函数的信息
形参是定义函数时定义的输出变量名,实参是在调用函数时真正传进去的值。


def describe_pet(animal_type, pet_name):
	print("\nI have a " + animal_type + ".")
	print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet(animal_type='hamster', pet_name='harry')
#关键字实参,和位置无关

实参可选

#位置实参
def get_formatted_name(first_name, last_name, middle_name=''):
    if middle_name:
        full_name = first_name + ' ' + middle_name + ' ' + last_name
    else:
        full_name = first_name + ' ' + last_name
    return full_name.title()
musician = get_formatted_name('jimi', 'hendrix')
musician = get_formatted_name('john', 'hooker', 'lee')
#函数返回值可以为任意结构,包括列表,字典;传递也可以传递列表,字典。

传递任意数量的实参

def make_pizza(*toppings):
    print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')
#形参名*toppings 中的星号让Python创建一个名为toppings 的空元组,

import:将 函数 存储在 模块 中导入使用
pizza.py

def make_pizza(size, *toppings):
	print("\nMaking a " + str(size) +"-inch pizza with the following toppings:")
	for topping in toppings:
		print("- " + topping)

making_pizzas.py

import pizza
pizza.make_pizza(16, 'pepperoni')
pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

单独导入一个或多个函数

from module_name import function_name
#from module_name import function_0, function_1, function_2
from pizza import make_pizza as mp   #给函数重新命名
import module_name as mn			#模块重命名
from pizza import *   
#导入pizza模块中所有函数,使用大型库的时候为了避免函数调用错误,通常只导入需要的函数

Q&A

Q:值传递和引用传递

Chapter 9 类

Notes

面向对象最重要的概念就是
类的概念:
1、根据类来创建对象被称为实例化;
2、类中的函数称为方法 ;
3、类中__init__()方法是一个特殊的方法,每当你根据Dog 类创建新实例时,Python都会自动运行它,且必须包括self形参;
类的基本操作

#创建类,使用类
class Car():
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
    def get_descriptive_name(self):
        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
        return long_name.title()
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())

继承

class Car():
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0
    def get_descriptive_name(self):
        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
        return long_name.title()
    def read_odometer(self):
        print("This car has " + str(self.odometer_reading) + " miles on it.")
    def update_odometer(self, mileage):
        if mileage >= self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print("You can't roll back an odometer!")
    def increment_odometer(self, miles):
        self.odometer_reading += miles
class ElectricCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())

导入类

from car import Car   #导入类的方法和但如函数的方法是一样的
from car import Car, ElectricCar
import car   #导入整个模块
from module_name import * 

Q&A

Q:关于类名命名规则
A:类名应采用驼峰命名法 ,即将类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名都采用小写格式,并在单词之间加上下划线。

Chapter 10 文件和异常

Notes

文件操作
读取文件

#文件中汉字也能读取显示,想要使用文件必须先打开再能使用
with open('sss.txt',encoding='UTF-8') as file_object:   
#这里打开文件要加上encoding='UTF-8'解码
    contents = file_object.read()
    print(contents)

with open('pi_digits.txt') as file_object:
	contents = file_object.read()
	print(contents.rstrip())
#read会返回一个换行符,上述的话输出内容就和输入内容完全一样了

路径问题  windows下是\反斜杠,其他系统下是/
file_path = 'text_files\filename.txt'  #相对路径
file_path = '/home/ehmatthes/other_files/text_files/filename.txt'  #绝对路径
with open(file_path) as file_object:

逐行读取
filename = 'sss.txt'
    with open(filename) as file_object:
        for line in file_object:
            print(line)

写入文件

#创建文件并写入   这样的话如果文件已经存在,也会覆盖文件的内容
filename = 'programming.txt'
with open(filename, 'w') as file_object:
    file_object.write("I love programming.")
#读取模式 ('r' )、写入模式 ('w' )、附加模式 ('a' ),或者r+w这样,缺省的话在读取模式

#将内容附加到文本末
filename = 'programming.txt'
with open(filename, 'a') as file_object: 
    file_object.write("I also love finding meaning in large datasets.\n")
    file_object.write("I love creating apps that can run in a browser.\n")

异常处理(出现异常catch抛出不就行了吗==)
为什么需要异常处理:每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。

try-except

#基本语法
try:
    print(5/0)
except ZeroDivisionError:
    print("You can't divide by zero!")   #当此处为 pass 时会不理这个错误继续运行
   
try:
	answer = int(first_number) / int(second_number) ❷ except ZeroDivisionError:
	print("You can't divide by 0!")
else:			#当try成功的话会执行else
	print(answer)

分析文本

#split()方法   按照空格分割成列表
title = "Alice in Wonderland"
print(title.split())
#output:['Alice', 'in', 'Wonderland']

储存数据 json --编程语言间通用数据格式

#创建json文件
import json
numbers = [2, 3, 5, 7, 11, 13]
filename = 'numbers.json' 
with open(filename, 'w') as f_obj: 
    json.dump(numbers, f_obj)
#读取json文件内容
import json
filename = 'numbers.json'
with open(filename) as f_obj:
    numbers = json.load(f_obj)
    print(numbers)

Chapter 11 测试代码

Notes

Python中unittest 模块提供了代码测试工具

后言

文中Q后续处理…,Python后续内容整理中…

参考资料

[1].《Python编程:从入门到实践》

你可能感兴趣的:(Python,python)