【python记录】② 基础语法——输入输出、数据结构详解、函数、类、异常概述


输入输出

1、 读取键盘输入

输入 str = input(“请输入:”)(读取一行文字输入)
输出 print ("你输入的内容是: ", str)

2、read读和write写文件

① 打开文件 f = open(‘workfile’, ‘w’, encoding=“utf-8”);关闭文件 f.close()

with open('workfile', encoding="utf-8") as f:
    read_data = f.read()

#或者
f = open('workfile', 'w', encoding="utf-8")
f.close()

权限说明

模式解释
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

② 读取文件

方式解释
f.read(size)读取一定数目的数据, 然后作为字符串或字节对象返回
f.readline()读取单独的一行
f.readlines()返回该文件中包含的所有行为一个list

③ 写文件

方式解释
f.write(string)将 string 写入到文件中, 然后返回写入的字符数
f.flush()刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
f.writelines(sequence)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
f.tell()用于返回文件当前的读/写位置(即文件指针的位置),为一个整数
f.seek(offset, whence)用于移动文件指针到指定位置,offset 表示相对于 whence 参数的偏移量,from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾
f.truncate([size])从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小。
f.fileno()返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
f.isatty()如果文件连接到一个终端设备返回 True,否则返回 False。

3、pickle模块

① 读:pkl_file = open(‘data.pkl’, ‘rb’);data1 = pickle.load(pkl_file)
② 写:pickle.dump(data1, output)

4、json格式


② 写json格式数据:json.dumps(x);json.dump(x, f)

数据与数据结构详解

1、数字类型

① 系统自带和math中的一些数学函数

函数解释
abs(x)返回数字的绝对值,如abs(-10) 返回 10
fabs(x)以浮点数形式返回数字的绝对值,如math.fabs(-10) 返回10.0
ceil(x)返回数字的上入整数,如math.ceil(4.1) 返回 5
floor(x)返回数字的下舍整数,如math.floor(4.9)返回 4
round(x [,n])返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。
modf(x)返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
exp(x)返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
log(x)如math.log(math.e)返回1.0,math.log(100,10)返回2.0
log10(x)返回以10为基数的x的对数,如math.log10(100)返回 2.0
pow(x, y)x**y 运算后的值。
sqrt(x)返回数字x的平方根。
max(x1, x2,…)返回给定参数的最大值,参数可以为序列。
min(x1, x2,…)返回给定参数的最小值,参数可以为序列。

② 随机数函数

函数解释
choice(seq)从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
randrange ([start,] stop [,step])从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1,例如 random.randrange(1, 100, 2),随机输出一个1-100内的奇数
random()随机生成一个实数,它在[0,1)范围内。
seed([x])改变随机数生成器的种子seed,可以在调用其他随机模块函数之前调用此函数。预先使用 random.seed(x) 设定好种子之后,使用 random() 生成的随机数将会是同一个
shuffle(lst)将序列的所有元素随机排序
uniform(x, y)随机生成下一个实数,它在[x,y]范围内。

注:使用时要加 random.XXX

③ 三角函数

函数解释
cos(x)返回x的弧度的余弦值。
acos(x)返回x的反余弦弧度值。
sin(x)返回的x弧度的正弦值。
asin(x)返回x的反正弦弧度值。
tan(x)返回x弧度的正切值。
atan(x)返回x的反正切弧度值。
atan2(y, x)返回给定的 y/x 的反正切值,以弧度为单位,结果是在 -pi 和 pi 之间
hypot(x, y)返回欧几里德范数 sqrt(xx + yy)。
degrees(x)将弧度转换为角度,如degrees(math.pi/2) , 返回90.0
radians(x)将角度转换为弧度

注:使用时要加 math.XXX

④ 常数

常数解释
pi 数学常量pi(圆周率,一般以π来表示)
e 数学常量e,e即自然常数(自然常数)

2、字符串类型

① 字符串格式

符号解释
%c格式化字符及其ASCII码
%s格式化字符串
%d格式化整数
%u格式化无符号整型
%o格式化无符号八进制数
%x格式化无符号十六进制数
%X格式化无符号十六进制数(大写)
%f格式化浮点数字,可指定小数点后的精度
%e用科学计数法格式化浮点数
%E作用同%e,用科学计数法格式化浮点数
%g%f和%e的简写
%G%f 和 %E 的简写
%p用十六进制数格式化变量的地址

② 格式化字符串

f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去

name = 'Runoob'
a =  f'Hello {name:1d}'  # 'Hello Runoob'
a = f'{1+2}'         # '3'
w = {'name': 'Runoob', 'url': 'www.runoob.com'}
a = f'{w["name"]}: {w["url"]}'  # 'Runoob: www.runoob.com'

格式化字符串的函数 str.format()

print('{0}+{1}={2}'.format(1,2,3))

repr()格式化字符串函数

print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')

③ 字符串函数

函数解释
join(seq)以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
len(string)返回字符串长度
split(str=“”, num=string.count(str))以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
splitlines([keepends])按照行(‘\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
find(str, beg=0, end=len(string))检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
rfind(str, beg=0,end=len(string))类似于 find()函数,不过是从右边开始查找
index(str, beg=0, end=len(string))跟find()方法一样,只不过如果str不在字符串中会报一个异常。
rindex( str, beg=0, end=len(string))类似于 index(),不过是从右边开始
count(str, beg= 0,end=len(string))返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
endswith(suffix, beg=0, end=len(string))检查字符串是否以 suffix 结束,判断 beg 或者 end 指定则检查指定的范围内是否以 suffix 结束,如果是,返回 True,否则返回 False。
startswith(substr, beg=0,end=len(string))检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
max(str)返回字符串 str 中最大的字母。
min(str)返回字符串 str 中最小的字母。
expandtabs(tabsize=8)把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8
lower()转换字符串中所有大写字符为小写
upper()转换字符串中的小写字母为大写
swapcase()将字符串中大写转换为小写,小写转换为大写
capitalize()将字符串的第一个字符转换为大写
lstrip()截掉字符串左边的空格或指定字符
rstrip()删除字符串末尾的空格或指定字符
strip([chars])在字符串上执行 lstrip()和 rstrip()
center(width, fillchar)返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
zfill (width)返回长度为 width 的字符串,原字符串右对齐,前面填充0
title()返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
translate(table, deletechars=“”)根据 table 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中
ljust(width[, fillchar])返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格
rjust(width,[, fillchar])返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串
maketrans()创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
bytes.decode(encoding=“utf-8”, errors=“strict”)解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。
encode(encoding=‘UTF-8’,errors=‘strict’)以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常
isalnum()检查字符串是否由字母和数字组成,即字符串中的所有字符都是字母或数字。如果字符串至少有一个字符,并且所有字符都是字母或数字,则返回 True;否则返回 False。
isalpha()如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回 False
isupper()如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
islower()如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
isdigit()如果字符串只包含数字则返回 True 否则返回 False,只对正整数有效,负数及小数均返回不正确,二者可以通过是否能运行float(x)判断
isnumeric()如果字符串中只包含数字字符,则返回 True,否则返回 False,包括Unicode 数字,全角数字(双字节),罗马数字,汉字数字,指数,分数。
isspace()如果字符串中只包含空白,则返回 True,否则返回 False.
istitle()如果字符串是标题化的(所有的单词拼写首字母为大写,且其他字母为小写)则返回 True,否则返回 False
isdecimal()检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。

注:使用时要加 str.XXX,str是已经定义的某一字符串

3、列表

① 相关函数

函数解释
list.append(x)在列表末尾添加一个元素,相当于 a[len(a):] = [x]
list.extend(iterable)用可迭代对象的元素扩展列表。相当于 a[len(a):] = iterable
list.insert(i, x)在指定位置插入元素。第一个参数是插入元素的索引,因此,a.insert(0, x) 在列表开头插入元素, a.insert(len(a), x) 等同于 a.append(x)
list.remove(x)从列表中删除第一个值为 x 的元素。未找到指定元素时,触发 ValueError 异常
list.pop([i])移除列表中给定位置上的条目,并返回该条目。 如果未指定索引号,则 a.pop() 将移除并返回列表中的最后一个条目。 如果列表为空或索引号在列表索引范围之外则会引发 IndexError
del list[2]删除list[2]元素(可以删除多个)
list.clear()删除列表里的所有元素,相当于 del a[:] 。
list.index(x[, start[, end]])返回列表中第一个值为 x 的元素的零基索引。未找到指定元素时,触发 ValueError 异常。可选参数 start 和 end 是切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是 start 参数
list.count(x)返回列表中元素 x 出现的次数。
list.sort(key=None, reverse=False)按照key就地排序列表中的元素,reverse = True 降序, reverse = False 升序(key可以是函数名)
list.reverse()翻转列表中的元素
list.copy()返回列表的浅拷贝。相当于 a[:]
max(list)返回列表元素最大值
min(list)返回列表元素最小值

② 用list实现堆栈(“后进先出”):向栈顶添加一个条目,使用 append()。 要从栈顶提取一个条目,使用 pop(),无需显式指定索引
③ 用list实现队列(“先进先出”):向队列添加一个条目,使用 append()。 要从队列提取一个条目,使用 popleft()
④ 列表推导:squares = list(map(lambda x: x**2, range(10)))等价于squares = [x**2 for x in range(10)]
④ 嵌套列表推导:行列转置[[row[i] for row in matrix] for i in range(4)]

4、元组

① 元组推导:a = (x for x in range(1,10))
② 相关函数

函数解释
del a删除元组,只能删除整个元组,不能删除某个元素
len(tuple)计算元组元素个数
max(tuple)返回元组中元素最大值。
min(tuple)返回元组中元素最小值。

5、集合

① 集合推导:setnew = {i**2 for i in (1,2,3)}
② 相关函数

函数解释
add()为集合添加元素
update()给集合添加元素
remove()移除指定元素
discard()删除集合中指定的元素,不报错
clear()移除集合中的所有元素
pop()随机移除元素
copy()拷贝一个集合
difference_update()移除集合中的元素,该元素在指定的集合也存在
difference()返回多个集合的差集
intersection()返回集合的交集,返回一个新集合
intersection_update()返回集合的交集,在原始的集合上移除不重叠的元素
union()返回两个集合的并集
symmetric_difference()返回两个集合中不重复的元素集合
symmetric_difference_update()移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中
isdisjoint()判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False
issubset()判断指定集合是否为该方法参数集合的子集。
issuperset()判断该方法的参数集合是否为指定集合的子集
len()计算集合元素个数

注:除了len外,其他都需要set.XXX,提前定义set

6、字典

① 修改、增加元素:tinydict[‘Age’] = 8
② 显式删除一个字典用del命令
③ 字典推导:dic = {x: x**2 for x in (2, 4, 6)}
④ 相关函数

函数解释
len(dict)计算字典元素个数,即键的总数。
str(dict)输出字典,可以打印的字符串表示。
type(variable)返回输入的变量类型,如果变量是字典就返回字典类型。
dict.clear()删除字典内所有元素
dict.copy()返回一个字典的浅复制
dict.fromkeys()创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
dict.get(key, default=None)返回指定键的值,如果键不在字典中返回 default 设置的默认值
key in dict如果键在字典dict里返回true,否则返回false
dict.items()以列表返回一个视图对象key,value
dict.keys()以列表返回所有key
dict.values()以列表返回所有value
dict.setdefault(key, default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
dict.update(dict2)把字典dict2的键/值对更新到dict里
dict.setdefault(key, default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
dict.update(dict2)把字典dict2的键/值对更新到dict里
pop(key[,default])删除字典 key(键)所对应的值,返回被删除的值
popitem()返回并删除字典中的最后一对键和值
del dict[key]删除元素

函数

① 定义:def 后跟函数名与括号内的形参列表
② return 语句返回函数的值(可以没有return语句)
③ 匿名函数用lambda定义

1、调用时传入参数

① 默认值参数:调用函数时,可以使用比定义时更少的参数,默认值为列表、字典或类实例等可变对象时,会累积后续调用时传递的参数:
② 关键字参数:kwarg=value 形式调用函数,关键字参数的顺序并不重要,但不能对同一个参数多次赋值
③不定长参数:**name 形式时,接收一个字典, *name 形参接收一个 元组,*name 必须在 **name 前面,单独出现星号 *,则星号 * 后的参数必须用关键字传入

def cheeseshop(kind, *arguments, **keywords):
    print("-- Do you have any", kind, "?")
    print("-- I'm sorry, we're all out of", kind)
    for arg in arguments:
        print(arg)
    print("-" * 40)
    for kw in keywords:
        print(kw, ":", keywords[kw])
        
cheeseshop("Limburger", "It's very runny, sir.",
           "It's really very, VERY runny, sir.",
           shopkeeper="Michael Palin",
           client="John Cleese",
           sketch="Cheese Shop Sketch")

# 输出
-- Do you have any Limburger ?
-- I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
shopkeeper : Michael Palin
client : John Cleese
sketch : Cheese Shop Sketch

④ 特殊参数 * 和 / : 详细解释参考这里
仅限位置形参应放在 / (正斜杠)前,/ 用于在逻辑上分割仅限位置形参与其它形参,如果函数定义中没有 /,则表示没有仅限位置形参。
在参数列表中第一个仅限关键字 形参前添加 *,表明必须以关键字参数形式传递该形参

2、装饰器

①装饰器定义如下

def decorator_function(original_function):
    def wrapper(*args, **kwargs):
        # 这里是在调用原始函数前添加的新功能
        before_call_code()
       
        result = original_function(*args, **kwargs)
       
        # 这里是在调用原始函数后添加的新功能
        after_call_code()
       
        return result
    return wrapper

# 使用装饰器
@decorator_function
def target_function(arg1, arg2):
    pass  # 原始函数的实现
def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(n):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(3) #等同于greet = repeat(greet)
def greet(name):
    print(f"Hello, {name}!")

greet("Alice")

② 类装饰器:包含 call 方法的类,它接受一个函数作为参数,并返回一个新的函数

class DecoratorClass:
    def __init__(self, func):
        self.func = func
   
    def __call__(self, *args, **kwargs):
        # 在调用原始函数之前/之后执行的代码
        result = self.func(*args, **kwargs)
        # 在调用原始函数之后执行的代码
        return result

@DecoratorClass
def my_function():
    pass

1、Class 对象

类对象支持两种操作:属性引用和实例化。

① 属性引用 使用 Python 中所有属性引用所使用的标准语法: obj.name

class MyClass:
    """A simple example class"""
    i = 12345

    def f(self):
        return 'hello world'

MyClass.i 和 MyClass.f 将分别返回一个整数和一个函数对象,可以通过赋值来更改 MyClass.i 的值
② 类的实例化 x = MyClass(),实例化操作 (“调用”类对象) 会创建一个空对象。 当一个类定义了 init() 方法时,类的实例化会自动为新创建的类实例发起调用 init()

def __init__(self):
    self.data = []

在类内引用参数和方法可以使用self.XXX

class Bag:
    def __init__(self):
        self.data = []

    def add(self, x):
        self.data.append(x)

    def addtwice(self, x):
        self.add(x)
        self.add(x)

2、继承

① 继承

class DerivedClassName(BaseClassName):

当构造类对象时,如果请求的属性在类中找不到,搜索将转往基类中进行查找。派生类可能会重写其基类的方法。可以简单地直接调用基类方法:即调用 BaseClassName.methodname(self, arguments)
② 内置函数可被用于继承机制:isinstance(obj, type) 来检查一个实例的类型,issubclass((bool, int) 来检查类的继承关系
③ 多重继承

class DerivedClassName(Base1, Base2, Base3):

④ 私有变量:那种仅限从一个对象内部访问的“私有”实例变量在 Python 中并不存在。 但是,带有一个下划线的名称 (例如 _spam) 应该被当作是 API 的非公有部分 (无论它是函数、方法或是数据成员)

错误和异常

1、assert(断言)

用于判断一个表达式,在表达式条件为 false 的时候触发异常。

2、异常处理

try /except

while True:
    try:
        x = int(input("请输入一个数字: "))
        break
    except ValueError:
        print("您输入的不是数字,请再次尝试输入!")

3、raise

x = 10
if x > 5:
    raise Exception('x 不能大于 5。x 的值为: {}'.format(x))

参考
python官方文档
总结文档

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值