Python基础

本文是对《Python编程:从入门到实践》的简单整理

简单变量

字符串

引号可为单引号或双引号

string.title()首字母大写

string1+string2字符串合并

string.rstrip()删除末尾空白

string.lstrip删除开头空白

string.strip()删除两侧空白

string.split()根据字符串创建单词列表

数字

str(num)转换为字符串

列表

列表基础

[]表示,用,分隔。可以将任何东西加入列表,其中的元素没有任何关系。

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)

打印结果为;

['trek', 'cannondale', 'redline', 'specialized']

list[index]访问列表元素

列表索引从0开始。

list.append()添加列表元素

list.insert(index, value)插入新元素,指定其索引和值

list.pop()返回列表末端元素,原列表删除末端元素

list.pop(index)弹出指定索引的元素

list.remove(value)根据值删除元素,只删除第一个指定值的元素

list.sort()对列表进行永久性排序(字典序)

sorted(list)对列表进行临时排序(字典序)

list.reverse()反转列表

len(list)求列表中的元素数

list[-1]列表中的最后一个元素

操作列表

遍历列表

for element in list: #记得加冒号
	operation1 #缩进语句在循环中执行
operation2 #该操作不在循环中

数值列表

for value in range(begin, end):
	operation

数值仅从beginend-1

list(range(begin, step, end))转换为数值列表

min(list)求列表中最小值

max(list)求列表中最大值

sum(list)求列表中所有元素之和

列表解析的例子:

squares = [value**2 for value in range(1, 11)]
print(squares)

输出结果为:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

使用列表的一部分

list[begin:end]选取列表中索引从beginend-1的元素组成新的列表,若不指定第一个元素则从头开始,若不指定终止元素至最后一个元素结束。

list2=list1[:]复制列表

元组

列表是可修改的,元组是不可修改的。

()表示,用,分隔。

tuple[index]访问元组中的元素

遍历元组与遍历列表类似。

不可修改元组内元素,但可对整个元组重新赋值。

条件语句

==相等 !=不等 andorTrueFalse

if condition1:
    operation1
elseif condition2:
    operation2
else: operation3

element in list检查特定元素是否在列表中

list作为条件语句判断列表是否非空

字典

基本操作

字典是一系列键值对,每个键都与一个值相关联。

例子如下:

alien_0 = {'color': 'green', 'points': 5}

dictionary[key]访问对应键的值

dictionary[newkey] = value添加键值对

del dictionary[key]删除对应键值对

建议将一个较大的字典放在多行中

字典的遍历

遍历所有键值对:

for key, value in dictionary:
    operation

遍历所有键:

for k in dictionary.keys():
    operation

遍历所有值:

fro v in  diuctionary.values():
    operation

字典的嵌套

字典,列表之间,字典与字典之间可以相互嵌套。

用户输入和while循环

用户输入

message=input(string)向用户提示string,message为接收的用户输入(默认为字符串)

int(string)将字符串转换为整数

while循环

while condition:
    operation

只要用户输入的不是这个值,程序就一直运行的例子:

while message != 'quit':
    message = input(prompt)
    print(message)

在while循环中可以使用标志:while tag = True or False :

break退出循环 continue跳过该次循环

函数

函数基础

def function(para1, para2):
    operation

若使用关键字实参则函数调用实参的顺序就不再重要了

function(para1=value1, para2=value2)

若输入参数少于所需参数,则函数调用形参的默认值

def function(para1, para2=default):
    operation

返回值

def function(para1, para2):
    operation
    return value

可选参数

运用函数调用形参默认值的规则,将可选参数置于参数输入的末尾

def function(para1, para2, para3=default):
    operation
    return value

通过function(para1, para2)调用

传入列表

将列表传入函数后可改变列表内容

若要禁止函数修改列表,则可传入列表的副本function(list[:])

传入任意数量的参数

使用元组

def make_pizza(*toppings): 
    """打印顾客点的所有配料""" 
    print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')

形参名*toppings中的星号让Python创建一个名为toppings的空元组,并将收到的所有值都封 装到这个元组中。

打印结果为:

('pepperoni',)
('mushrooms', 'green peppers', 'extra cheese')

结合位置实参和任意数量实参

def make_pizza(size, *toppings):
"""概述要制作的比萨"""
print("\nMaking a " + str(size) +
"-inch pizza with the following toppings:")
for topping in toppings:
print("- " + topping)
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

使用字典(任意数量的关键字实参)

def build_profile(first, last, **user_info):
"""创建一个字典,其中包含我们知道的有关用户的一切"""
    profile = {}
    profile['first_name'] = first
    profile['last_name'] = last
    for key, value in user_info.items():
        profile[key] = value
return profile
user_profile = build_profile('albert', 'einstein',
location='princeton',
field='physics')
print(user_profile)

形参**user_info中的两个星号让Python创建一个名为user_info的空字典,并将收到的所有名称—值对都封装到这个字典中。

打印结果为:

{'first_name': 'albert', 'last_name': 'einstein',
'location': 'princeton', 'field': 'physics'}

将函数储存在模块中

导入整个模块

仅在file.py中保留def的函数语句块,可通过

import file
file.function(para)

调用对应的函数。

导入特定的函数

from module import function
function(para)

导入多个函数:

from module import function1,function2,function3

使用as 给函数指定别名

from module import function as func

导入模块中所有函数

from module import *

import语句中的星号让Python将模块pizza中的每个函数都复制到这个程序文件中。由于导入了每个函数,可通过名称来调用每个函数,而无需使用句点表示法。

创建和使用类

一个例子如下:

class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self, name, age):
        """初始化属性name和age"""
        self.name = name
        self.age = age
    def sit(self):
        """模拟小狗被命令时蹲下"""
        print(self.name.title() + " is now sitting.")
    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(self.name.title() + " rolled over!")

类中的函数称为方法。

方法__init__()

在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。

在这个方法的定义中,形参self是必要的,同时必须位于其他形参的前面。Python调用这个__init__()方法来创建实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

以self为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。self.name = name获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例。像这样可通过实例访问的变量称为属性。

在Python 2.7中创建类时,需要做细微的修改,在括号内包含单词object:

class ClassName(object):
    --snip--

根据类创建实例

class Dog():
--snip--
my_dog = Dog('willie', 6)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")

Python使用实参’willie’和6调用Dog类中的方法__init__()
方法__init__()创建一个表示特定小狗的示例,并使用我们提供的值来设置属性nameage。
方法__init__()并未显式地包含return语句,但Python自动返回一个表示这条小狗的实例。

可通过句点访问属性和调用方法。

使用类和实例

给属性指定默认值

class ClassName():
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        self.attr3 = default

修改属性的值

直接赋值或通过方法更新。

继承

子类的属性和方法

创建子类时,父类必须包含在当前文件中,且位于子类前面。定义子类时,必须在括号内指定父类的名称。

class ClassName():
    --snip--
class subclass(ClassName):
    def __init__(self, attr1, attr2):
        super().__init__(attr1,attr2)
        self.subattr = default #初始化子类特有属性
    def submethod(self): #子类特有的方法
        operation

super()是一个特殊函数,帮助Python将父类和子类关联起来。这行代码让Python调用
父类的方法__init__(),让子类实例包含父类的所有属性。

重写父类方法

对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。

例子如下:

def ElectricCar(Car):
--snip-- #car类中有fill_gas_tank()方法
	def fill_gas_tank():
	"""电动汽车没有油箱"""
	print("This car doesn't need a gas tank!")

将实例用作属性

当属性和方法较多时,可将类的一部分作为一个独立的类提取出来。

例子如下:

class Car():
--snip--
class Battery():
"""一次模拟电动汽车电瓶的简单尝试"""
	def __init__(self, battery_size=70):
        """初始化电瓶的属性"""
		self.battery_size = battery_size
	def describe_battery(self):
		"""打印一条描述电瓶容量的消息"""
		print("This car has a " + str(self.battery_size) + "-kWh battery.")
class ElectricCar(Car):
"""电动汽车的独特之处"""
def __init__(self, make, model, year):
"""
初始化父类的属性,再初始化电动汽车特有的属性
"""
	super().__init__(make, model, year)
	self.battery = Battery()
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()

导入类

方法与导入函数类似

导入单个类

from module import class_name

也可在同一模块中存储多个类

导入多个类

from module import class1,class2

导入整个模块

import module

导入模块中的所有类

from module import *

文件和异常

从文件中读取数据

读取整个文件

一个文件读取的例子如下:

with open('pi_digits.txt') as file_object:
	contents = file_object.read()
	print(contents)

函数open()接受一个参数:要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件。在这个示例中,
当前运行的是file_reader.py,因此Python在file_reader.py所在的目录中查找pi_digits.txt。函数open()返回一个表示文件的对象。在这里,open('pi_digits.txt')返回一个表示文件pi_digits.txt的对象;Python将这个对象存储在我们将在后面使用的变量中。
关键字with在不再需要访问文件后将其关闭。

也可以调用open()close()来打开和关闭文件,但这样做时,如果程序存在bug,导致close()语句未执行,文件将不会关闭。

相比于原始文件,输出唯一不同的地方是末尾多了一个空行,因为read()到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行。要删除多出来的空行,可在print语句中使用rstrip()

逐行读取

filename = 'pi_digits.txt'
with open(filename) as file_object:
for line in file_object:
	print(line)

创建一个包含文件各行内容的列表

filename = 'pi_digits.txt'
with open(filename) as file_object:
	lines = file_object.readlines()
for line in lines:
	print(line.rstrip())

写入文件

写入空文件

filename = 'programming.txt'
with open(filename, 'w') as file_object:
	file_object.write("I love programming.")

附加到文件

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")

打开文件时指定了实参’a’,以便将内容附加到文件末尾,而不是覆盖文件原来的内容。

异常

try: except:语句

Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。

可以使用try: except:语句处理异常。

try: 
    operation1
except error:
    operation2
else:
    operation3

如果try代码块中的代码运行起来没有问题,Python将跳过except代码块;如果try代码块中的代码导致了错误,Python将查找
这样的except代码块,并运行其中的代码,即其中指定的错误与引发的错误相同。try代码中运行成功就继续执行else中的语句。

可以通过:

except error:
    pass

使程序在产生错误时什么都不做。

处理ZeroDivisionError 异常

print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")
while True:
	first_number = input("\nFirst number: ")
	if first_number == 'q':
		break
	second_number = input("Second number: ")
	try:
		answer = int(first_number) / int(second_number)
	except ZeroDivisionError:
		print("You can't divide by 0!")
	else:
		print(answer)

处理FileNotFoundError 异常

filename = 'alice.txt'
try:
	with open(filename) as f_obj:
	contents = f_obj.read()
except FileNotFoundError:
	msg = "Sorry, the file " + filename + " does not exist."
	print(msg)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值