python基础(Python高级特性(切片、列表生成式)、字符串的正则表达式、函数、模块、Python常用内置函数、错误处理)培训讲义

文章目录

  • 1. Python高级特性(切片、列表生成式)
    • a) 切片的概念、列表/元组/字符串的切片
      • 切片的概念
      • 列表切片
        • 基本索引
        • 简单切片
          • 超出有效索引范围
          • 缺省
        • 扩展切片
          • step为正数
          • step为负数
    • b) 列表生成式以及使用列表生成式需要注意的地方
      • 概念
      • 举例说明
        • 1. 生成一个列表,列表元素分别为 [1\*1,2\*2,3\*3……n\*n],假设n = 10。
        • 2. 接着上一个需求,要求返回的序列中不存在偶数项:
        • 3. 字符串s1 ='ABC',字符串 s2 = '123',要求:生成序列A1 A2 A3 B1 B2 B3 C1 C2 C3
  • 2. 字符串的正则表达式
    • 概念
    • Python中的正则表达式模块re
    • 正则表达式语法
    • 正则表达式函数
    • 示例
      • 1、re.match()方法
      • 2、re.search()方法
      • 3、re.findall()方法
      • 4、re.sub()方法
  • 3. 函数
    • a) 函数的概念
    • b) 函数的定义与调用
      • 函数名
      • 形参列表
      • 返回值
      • 实际运用举例
    • c) 函数的参数(位置参数、默认参数、关键字参数)
      • 举例说明
    • d) 递归函数(举一个简单的例子帮助理解)(选讲)
  • 4. 模块
    • 概念
    • a) 使用内置模块(如random、os、time等)
      • random模块常用函数
      • os模块常用函数
      • time模块常用函数
    • b) 使用第三方模块(安装,导入,使用、如requests等)
      • 安装
      • 导入
      • 使用
    • c) Import自己写的文件,相对导入和绝对导入
      • Python Modules模块
        • 举个例子
        • 导入模块
        • 单独运行模块
        • 利用相对路径引用包和模块
  • 5. Python常用内置函数
    • a) 求和函数sum
    • b) 排序函数sorted
    • c) 过滤函数filter
    • d) 其他函数(max、min、abs)
      • max
      • min
      • abs
    • e) 流程函数map(选讲)
  • 6.错误处理 (选讲)
  • 思考题
    • 为什么有len(a)和省略len(a)结果会不一样?
    • 找出1-10之间所有的偶数,并且返回一个列表(这个列表中含以这个偶数为半径的圆的面积)
    • 匹配手机号码
    • 匹配邮箱地址
    • 替换字符串

1. Python高级特性(切片、列表生成式)

a) 切片的概念、列表/元组/字符串的切片

切片的概念

在Python中,切片(slice)是对序列型对象(如list, string, tuple)的一种高级索引方法。普通索引只取出序列中一个下标对应的元素,而切片取出序列中一个范围对应的元素。

列表切片

基本索引

在这里插入图片描述

简单切片

简单切片指的是这样的切片形式:a[start:stop],其行为是得到下标在这样一个前闭后开区间范围内的元素,其中start和stop为负数时,简单看作是负数下标对应的位置即可:

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[2:3])
# [2]
print(a[5:9])
# [5, 6, 7, 8]
print(a[5:-1])
# [5, 6, 7, 8]
print(a[-5:9])
# [5, 6, 7, 8]
print(a[-5:-1])
# [5, 6, 7, 8]

两个比较特殊的情况:超出有效索引范围缺省。

超出有效索引范围

当start或stop超出上文提到的有效索引范围​时,切片操作不会抛出异常,而是进行截断

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[-100:5])
# [0, 1, 2, 3, 4]
print(a[5:100])
# [5, 6, 7, 8, 9]
print(a[-100:100])
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[100:1000])
# []

另外,如果start的位置比stop还靠后怎么办?Python还是不会抛出异常,而是直接返回空序列:

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[6:5])
# []
缺省

start和stop都是可以缺省的,在缺省的情况下,Python的行为是尽可能取最大区间,具体来说:

按照扩充索引范围的观点,start的缺省值是无穷小(​),stop的缺省值是无穷大(​)

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[:5])
# [0, 1, 2, 3, 4]
print(a[5:])
# [5, 6, 7, 8, 9]
print(a[100:])
# []
扩展切片

扩展切片指的是这样的切片形式:a[start:stop:step],其中step是一个非零整数,即比简单切片多了调整步长的功能,此时切片的行为可概括为:从start对应的位置出发,以step为步长索引序列,直至越过stop对应的位置,且不包括stop本身。事实上,简单切片就是step=1的扩展切片的特殊情况。需要详细解释的是step分别为正数和负数的两种情况。

step为正数

当step为正数时,切片行为很容易理解,start和stop的截断和缺省规则也与简单切片完全一致:

# step为正数
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[0:6:2])
# [0, 2, 4]
print(a[::2])
# [0, 2, 4, 6, 8]
print(a[:-2:2])
# [0, 2, 4, 6]
print(a[4::2])
# [4, 6, 8]
step为负数

当step为负数时,切片将其解释为从start出发以步长|step|逆序索引序列,此时,start和stop的截断依然遵循前述规则,但缺省发生一点变化,因为我们说过,在缺省的情况下,Python的行为是尽可能取最大区间,此时访问是逆序的,start应尽量取大,stop应尽量取小,才能保证区间最大,因此:

按照扩充索引范围的观点,start的缺省值是无穷大(​),stop的缺省值是无穷小(​)

# step为负数
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[5::-1])
# [5, 4, 3, 2, 1, 0]
print(a[:4:-2])
# [9, 7, 5]
print(a[::-1])
# [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

b) 列表生成式以及使用列表生成式需要注意的地方

概念

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

列表生成式的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是0个或多个for或者if语句。列表表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以if和for语句为上下文的表达式运行完成之后产生。

举例说明

1. 生成一个列表,列表元素分别为 [1*1,2*2,3*3……n*n],假设n = 10。

一般方法:

l1 = []
for i in range(1,11):l1.append(i*i)
print(l1)

列表生成式:

l2 = [i*i for i in range(1,11)]
print(l2)
2. 接着上一个需求,要求返回的序列中不存在偶数项:

一般形式:

l3 = []
for i in range(1,11):if i%2 != 0:l3.append(i*i)
print(l3)

列表生成式

l4 = [i*i for i in range(1,11) if i%2 != 0]
print(l4)
3. 字符串s1 =‘ABC’,字符串 s2 = ‘123’,要求:生成序列A1 A2 A3 B1 B2 B3 C1 C2 C3

列表生成式

l5 = [i+j for i in 'ABC' for j in '123']
print(l5)

一般模式

l6 = []
for i in 'ABC':for j in '123':l6.append(i+j)
print(l6)

2. 字符串的正则表达式

概念

正则表达式是一种用来描述字符串模式的文本。它由一些特殊字符和普通字符组成,可以用来匹配特定的字符串模式。例如,可以使用正则表达式匹配所有的电子邮件地址、所有的URL、所有的电话号码等。正则表达式不仅可以用来匹配字符串,还可以用来替换字符串,或者提取字符串中的某些部分。

Python中的正则表达式模块re

在Python中,正则表达式模块为re,它提供了一组函数和类,用于操作正则表达式。在使用re模块之前,需要先导入re模块,可以使用以下代码进行导入:

import re

正则表达式语法

正则表达式语法包括一些特殊字符和普通字符,它们组合起来形成了正则表达式模式。以下是一些常用的正则表达式语法:

  • . 表示匹配任意一个字符。
  • ^ 表示匹配字符串的开始位置。
  • $ 表示匹配字符串的结束位置。
  • *表示匹配前一个字符0次或多次。
  • +表示匹配前一个字符1次或多次。
  • ? 表示匹配前一个字符0次或1次。
  • \ 表示转义字符。
  • [] 表示字符集合,匹配其中任意一个字符。
  • [^] 表示字符集合取反,匹配不在其中的任意一个字符。
  • () 表示子模式,可以将多个字符组成一个整体,方便后续引用。
  • {n} 匹配n个前面表达式。例如,"o{2}“不能匹配"Bob"中的"o”,但是能匹配"food"中的两个o。
  • {n,} 精确匹配n个前面表达式。例如,"o{2,}“不能匹配"Bob"中的"o”,但能匹配"foooood"中的所有o。"o{1,}“等价于"o+”。"o{0,}“则等价于"o*”

特殊字符类

  • . 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。
  • \d 匹配一个数字字符。等价于 [0-9]。
  • \D 匹配一个非数字字符。等价于 [^0-9]。
  • \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
  • \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
  • \w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]'。
  • \W 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。

正则表达式函数

re模块提供了一组函数,用于操作正则表达式,常用的函数包括:

  • re.match(pattern, string, flags=0):尝试从字符串的开始位置匹配一个模式,如果匹配成功,则返回一个Match对象,否则返回None
  • re.search(pattern, string, flags=0):在字符串中搜索模式,如果匹配成功,则返回一个Match对象,否则返回None。
  • re.findall(pattern, string, flags=0):在字符串中查找模式,返回所有匹配成功的结果
  • re.sub(pattern, repl, string, count=0, flags=0):将字符串中所有匹配模式的部分替换为指定的字符串

参数说明:

  • pattern: 匹配的正则表达式
  • string: 要匹配的字符串。
  • flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
    – re.I 使匹配对大小写不敏感
    – re.L 做本地化识别(locale-aware)匹配
    – re.M 多行匹配,影响 ^ 和 $
    – re.S 使 . 匹配包括换行在内的所有字符
    – re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
    – re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
  • repl : 替换的字符串,也可为一个函数。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

示例

下面通过一些示例来说明Python中正则表达式的使用。

1、re.match()方法

re.match()方法用于从字符串的开头开始匹配模式,如果匹配成功,则返回一个匹配对象;否则返回None。

import repattern = r"hello"
string = "hello world"result = re.match(pattern, string)if result:print("Match found!")
else:print("No match")

2、re.search()方法

re.search()方法用于在字符串中搜索匹配模式,如果找到任意位置的匹配,则返回一个匹配对象;否则返回None。

import repattern = r"world"
string = "hello world"result = re.search(pattern, string)if result:print("Match found!")
else:print("No match")

3、re.findall()方法

re.findall()方法用于在字符串中搜索所有匹配模式的子串,并将它们作为列表返回。

import repattern = r"\d+"
string = "I have 10 apples and 20 oranges."result = re.findall(pattern, string)print(result)  # Output: ['10', '20']

4、re.sub()方法

re.sub()方法用于在字符串中搜索匹配模式的子串,并将其替换为指定的字符串

import repattern = r"apple"
string = "I have an apple."result = re.sub(pattern, "banana", string)print(result)  # Output: "I have an banana."

3. 函数

a) 函数的概念

  • 函数是可以重复执行一定任务的代码片段,具有独立的固定的输入输出接口。
  • 函数定义的本质,是给一段代码取个名字,方便以后重复使用
  • 为了方便以后调用这个函数,在定义它的时候,就需要明确它的输入(参数)与输出(返回值)

b) 函数的定义与调用

定义函数的语法格式

def 函数名(形参列表):#可执行语句return 返回值

函数名

  • 只要是合法的标识符即可(同变量命名)
  • 为了提高可读性,建议函数名由一个或多个有意义的单词组成,单词之间用下划线_分隔,字母全部小写

形参列表

  • 在函数名后面的括号内,多个形参用逗号分隔,可以没有参数
  • 参数可以有默认值,可以用等号=直接指定默认值,有默认值的参数必须排最后
  • 没有默认值的参数,在调用的时候必须指定
  • 形参也可以没有,但是括号不能省略
  • 调用有默认值的参数要指定名字

返回值

  • 返回值可以没有,直接省略return这句话
  • 返回值可以是一个或多个,用逗号分隔,组合成一个元组
  • 返回值还可以是表达式
  • 多个返回值,不需要的用下划线顶替

实际运用举例

# 函数定义
def myfunc(arg1, arg2, arg3=None):''' This is a example for python documentation.这是一个为python函数提供文档的例子。arg1: 第一个参数的说明arg2: 第二个参数的说明arg3: 第三个参数的说明(这个参数有默认值)v1, v2, v3: 返回值的说明 '''v1 = arg1 + arg2v2 = arg1 * arg2if arg3 is None:v3 = arg1 + arg2else:v3 = arg1 + arg2 + arg3return v1, v2, v3
# 函数调用
v1, v2, v3 = myfunc(5, 3, arg3=4)
print(v1, v2, v3)    #8 15 12# 使用arg3的默认值调用函数
v1, v2, v3 = myfunc(5, 3)
print(v1, v2, v3)    #8 15 8# 忽略一个返回值
v1, v2, _ = myfunc(5, 3)
print(v1, v2, v3)    #8 15 8# 看看返回值是元组tuple,在返回的过程中被自动解包
print(type(myfunc(5,3)))    #<class 'tuple'>

c) 函数的参数(位置参数、默认参数、关键字参数)

  • 函数的参数是参数与外部可变的输入之间交互的通道。
  • 函数的参数名称应该满足标识符命名规范,应该有明确的含义,可通过参数名称知道每个参数的含义。
  • 在函数定义下面的注释中逐个注明函数(和返回值)的含义,以便用户即使不甚了解函数中的具体内容也能正确无误的使用它。
  • 实参:实际参数,从外面传递来的实际的参数
  • 形参:形式参数,在函数内部它形式上的名字
  • 调用函数时,实参按照顺序位置与形参绑定,称为位置参数(Positional Argument)
  • 也可以在调用时,写明实参与形参的对应关系,称作传递关键字参数(Keyword Argument),这时候位置信息被忽略了
  • 同时传递位置参数与关键字参数,应该先传递位置参数,再传递关键字参数!
  • 函数定义的时候,可以指定默认值,但带默认值的参数必须列在参数列表的最后

举例说明

#举一个小栗子,计算纸箱子的体积
def cube_volume(length, width, height = 0.25):'''计算纸箱子的体积(单位:m)length: 长;    width: 宽height: 高(默认参数0.25)v: 返回值,纸箱的体积,单位m**3'''if length <= 0:print('length must larger than 0!')return 0if width <= 0:print('width must larger than 0!')return 0if height <= 0:print('height must larger than 0!')return 0v = length*width*heightprint('length = %.2f; width = %.2f; height = %.2f; cube volume = %.2f' % \(length, width, height, v))return v# 使用位置参数调用
v = cube_volume(1, 2, 3)
# 使用关键字参数调用
v = cube_volume(width = 1, height = 2, length = 3)
# 位置参数和关键字参数混用
v = cube_volume(1, height = 2, width = 3)# 关键字参数在位置参数之前会报错
# v = cube_volume(width = 1, 2, 3)

d) 递归函数(举一个简单的例子帮助理解)(选讲)

  • 一个函数里面调用它自己,称为递归。
  • 递归可以视作一种隐式的循环,不需要循环语句控制也可实现重复执行某段代码。
  • 递归在大型复杂程序中非常有用,在数值和非数值算法中都能大显身手!
  • 使用递归的时候要注意,当一个函数不断调用自己的时候,必须保证在某个时刻函数的返回值是确定的,即不再调用自己。

经典递归应用:斐波拉契数列

# 斐波那契数列(Fibonacci sequence)
def Fibonacci(n):''' Fibonacci sequencef(0)=1, f(1) = 1, f(n) = f(n-1)+f(n-2)    	'''if n == 0 or n == 1:        return 1else:      return Fibonacci(n-1) + Fibonacci(n-2)# 测试一下,注意n不要设的太大,python的递归效率是比较低的,太大会死机
print(Fibonacci(5))
# 斐波那契数列,前20位
print('Fibonacci sequence:')
for i in range(20):print('%d: %d' % (i,Fibonacci(i)))

4. 模块

概念

在刚入门python时,模块化编程、模块、类库等术语常常并不容易理清。尤其是Modules(模块)和Packages(包),在import引用时很容易混淆出错。

实际上,Python中的函数(Function)、类(Class)、模块(Module)、包库(Package),都是为了实现模块化引用,让程序的组织更清晰有条理。

👉通常,函数、变量、类存储在被称为模块(Module)的.py文件中,一组模块文件又组成了包(Package)。

👉将函数、变量、类存储在存储在独立的.py文件中,可隐藏代码实现的细节,将不同代码块重新组织,与主程序分离,简化主程序的逻辑,提高主程序的可读性。

👉 有了包和模块文件,可以在其他不同程序中进行复用,还可以使用其他人开发的第三方依赖库。

a) 使用内置模块(如random、os、time等)

random模块常用函数

随机数模块,该模块中定义了多个可产生各种随机数的函数。
在这里插入图片描述

import random
print(random.random())
print(random.randint(3,100))
rl = [2,1,3,4,2,2,1,4,5,6,2,5,2,1]
print(random.choice(rl))
print(random.uniform(1,2))

os模块常用函数

提供了访问操作系统服务的功能,该模块中常用函数如下表所示。
在这里插入图片描述

import os
print(os.getcwd())
print(os.path.abspath(os.getcwd()))
print(os.path.split(os.getcwd()))

time模块常用函数

在这里插入图片描述

import time
print(time.time())
print(time.localtime()) 
print("---start---")
time.sleep(2)  # 休眠2秒
print("-- end---")

b) 使用第三方模块(安装,导入,使用、如requests等)

以requests为例:

安装

对于第三方模块需要先进行安装操作

pip install requests

导入

安装好对应包后再项目中进行导入

import requests

使用

导入对应的包后即可在项目中使用包中的对应函数方法

response = requests.get('http://httpbin.org/get')
print(response.text)

将返回值以json形式打印

import requests
import jsonresponse = requests.get("http://httpbin.org/get")
print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json()))

c) Import自己写的文件,相对导入和绝对导入

Python Modules模块

Modules模块是包含 Python 定义和语句的文件。以.py为后缀的文件名就是模块名称。

举个例子

我们创建了一个fibo.py文件,文件内容为:

# Fibonacci numbers moduledef fib(n):    # write Fibonacci series up to na, b = 0, 1while a < n:print(a, end=' ')a, b = b, a+bprint()def fib2(n):   # return Fibonacci series up to nresult = []a, b = 0, 1while a < n:result.append(a)a, b = b, a+breturn result

这里fibo.py就是一个模块,fib、fib2是fibo模块中的函数。

导入模块

如果我们想要在其他程序中使用fibo模块,可以有以下三种方式导入:
①导入整个模块

#import module_name
import fibo

可使用下面的语法来使用其中任何一个函数:

#module_name.func()
fibo.fib(10)

⭕ 注意:这里模块名+句点不可省略。

②导入模块中的特定函数

#from module_name import function_name
from fibo import fib, fib2fib(10)

若使用这种语法,调用函数时就无需使用模块名+句点。
因为在import语句中已经显式地导入了函数fib和fib2,因此调用它时只需指定其名称。

③导入模块中的所有函数

#from module_name import *
from fibo import *fib(20)

这种方式会导入除可下划线 (__)开头的名称以外的所有函数。

⭕ 注意:在大多数情况下,通常不推荐*这种用法,因为它可能会在解释器中引入了一组未知的名称,而且通常会导致代码可读性变差。

给导入的模块一个别名

# import module as m
import numpy as npa = np.arange(100)

利用as给导入模块一个别名,简化代码中的调用写法。

单独运行模块

如果我们想单独测试下模块,可以在模块中添加以下代码,就可以既用作脚本,也可用作可导入模块:

if __name__ == "__main__":fib(10)
利用相对路径引用包和模块

这里的.可以访问同级目录下的包(Package)或者模块(Module)。
这里的..可以访问上一级目录下的包(Package)或者模块(Module)。

5. Python常用内置函数

a) 求和函数sum

描述
sum() 方法对序列进行求和计算。
语法
以下是 sum() 方法的语法:

sum(iterable[, start])

参数

  • iterable – 可迭代对象,如:列表、元组、集合。
  • start – 指定相加的参数,如果没有设置这个值,默认为0。

返回值
返回计算结果。

实例

print(sum([0,1,2]))
print(sum((2, 3, 4), 1)) # 元组计算总和后再加 1
print(sum([0,1,2,3,4], 2)) # 列表计算总和后再加 2

b) 排序函数sorted

描述
sorted() 函数对所有可迭代的对象进行排序操作。

sort 与 sorted 区别

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

语法
sorted 语法:

sorted(iterable, key=None, reverse=False)

参数说明:

  • iterable – 可迭代对象。

  • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

  • reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)

返回值
返回重新排序的列表。

# b) 排序函数sorted
a = [5, 7, 6, 3, 4, 1, 2]
b = sorted(a)  # 保留原列表
print(a)
# [5, 7, 6, 3, 4, 1, 2]
print(b)
# [1, 2, 3, 4, 5, 6, 7]L = [('f', 2), ('a', 1), ('c', 3), ('d', 4)]
L1 = sorted(L, key=lambda x: x[1])  # 利用key
L2 = sorted(L, key=lambda x: x[0])  # 利用key
print(L1)
# [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
print(L2)
# [('a', 1), ('c', 3), ('d', 4), ('f', 2)]students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
res1 = sorted(students, key=lambda s: s[2])  # 按年龄排序
print(res1)
# [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]res2 = sorted(students, key=lambda s: s[2], reverse=True)  # 按降序
print(res2)
# [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]res3 = sorted(students, key=lambda s: (s[1],s[2]))  # 按分类排序,分类相同按年龄
print(res3)
# [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

c) 过滤函数filter

描述
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中

语法
以下是 filter() 方法的语法:

filter(function, iterable)

参数

  • function – 判断函数。
  • iterable – 可迭代对象。

返回值
返回一个迭代器对象

实例
过滤出列表中的所有奇数:

def is_odd(n):return n % 2 == 1tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
newlist = list(tmplist)
print(newlist)
# [1, 3, 5, 7, 9]

过滤出1~100中平方根是整数的数:

import math
def is_sqr(x):return math.sqrt(x) % 1 == 0tmplist = filter(is_sqr, range(1, 101))
newlist = list(tmplist)
print(newlist)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

d) 其他函数(max、min、abs)

max

描述
max() 方法返回给定参数的最大值,参数可以为序列。

语法
以下是 max() 方法的语法:

max( x, y, z, .... )

参数

  • x – 数值表达式。
  • y – 数值表达式。
  • z – 数值表达式。

返回值
返回给定参数的最大值。

实例
以下展示了使用 max() 方法的实例:

print ("max(80, 100, 1000) : ", max(80, 100, 1000))
print ("max(-20, 100, 400) : ", max(-20, 100, 400))
print ("max(-80, -20, -10) : ", max(-80, -20, -10))
print ("max(0, 100, -400) : ", max(0, 100, -400))

以上实例运行后输出结果为:

max(80, 100, 1000) :  1000
max(-20, 100, 400) :  400
max(-80, -20, -10) :  -10
max(0, 100, -400) :  100

min

描述
min() 方法返回给定参数的最小值,参数可以为序列。

语法
以下是 min() 方法的语法:

min( x, y, z, .... )

参数

  • x – 数值表达式。
  • y – 数值表达式。
  • z – 数值表达式。

返回值
返回给定参数的最小值。

实例
以下展示了使用 min() 方法的实例:

print ("min(80, 100, 1000) : ", min(80, 100, 1000))
print ("min(-20, 100, 400) : ", min(-20, 100, 400))
print ("min(-80, -20, -10) : ", min(-80, -20, -10))
print ("min(0, 100, -400) : ", min(0, 100, -400))

以上实例运行后输出结果为:

min(80, 100, 1000) :  80
min(-20, 100, 400) :  -20
min(-80, -20, -10) :  -80
min(0, 100, -400) :  -400

abs

描述
abs() 函数返回数字的绝对值。

语法
以下是 abs() 方法的语法:

abs( x )

参数

  • x – 数值表达式,可以是整数,浮点数,复数。

返回值
函数返回 x(数字)的绝对值,如果参数是一个复数,则返回它的大小。

实例
以下展示了使用 abs() 方法的实例:

print ("abs(-40) : ", abs(-40))
print ("abs(100.10) : ", abs(100.10))

以上实例运行后输出结果为:

abs(-40) :  40
abs(100.10) :  100.1

e) 流程函数map(选讲)

描述
map() 函数会根据提供的函数对指定序列做映射

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

语法
以下是 map() 方法的语法:

map(function, iterable, ...)

参数

  • function – 函数
  • iterable – 一个或多个序列

返回值
返回一个迭代器。

实例
以下实例展示了 map() 的使用方法:

def square(x) :         # 计算平方数return x ** 2map_return = map(square, [1,2,3,4,5])    # 计算列表各个元素的平方
print(map_return)
# <map object at 0x0000022FB28CFA30>     # 返回迭代器
map_return_list = list(map(square, [1,2,3,4,5]))   # 使用 list() 转换为列表
print(map_return_list)
# [1, 4, 9, 16, 25]

6.错误处理 (选讲)

Python3 错误和异常
实例
使用 try…except…finally 语句

print("===== 错误处理 =====")
# 不加错误处理时:
a = 3
b = 0
# 这里会报除零错误
# print(a / b)# 采用错误处理
try:print(a / b)
except ZeroDivisionError as ex1:  # 捕获除零错误print("除零错误!", ex1)
finally:print("程序结束")print("===== 错误处理2 ======")
# 同时处理多种错误
c = 5
d = "ss"try:print(c / d)
except ZeroDivisionError as ex1:print("除零错误!", ex1)
except TypeError as ex2:print("类型不对!必须都为数值!", ex2)
except Exception as ex3:print("未知错误!", ex3)
finally:print("程序结束!")

思考题

为什么有len(a)和省略len(a)结果会不一样?

# 为什么有len(a)和省略len(a)结果会不一样?
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[0::-1])
# [0]
print(a[0:len(a):-1])
# []

当step为负数时,切片将其解释为从start出发以步长|step|逆序索引序列,此时,start和stop的截断依然遵循前述规则,但缺省发生一点变化,因为我们说过,在缺省的情况下,Python的行为是尽可能取最大区间,此时访问是逆序的,start应尽量取大,stop应尽量取小,才能保证区间最大,因此:

按照扩充索引范围的观点,start的缺省值是无穷大(​),stop的缺省值是无穷小(​)

找出1-10之间所有的偶数,并且返回一个列表(这个列表中含以这个偶数为半径的圆的面积)

方法一:使用列表生成式,计算圆的面积要用到圆周率参数,需要导入math模块:

import math
print([math.pi * r * r for r in range(2,11,2)])

方法二:定义一个求圆面积的函数,然后在列表生成式中直接调用函数,从而求出序列中符合条件的半径的面积:

def square(r):res = math.pi * r *rreturn res
print([square(r) for r in range(2,11,2)])

匹配手机号码

手机号码由11位数字组成,通常以1开头。使用正则表达式可以匹配符合这种模式的手机号码。以下是一个匹配手机号码的正则表达式:

pattern = r'^1\d{10}$'

其中,^表示字符串的开始位置,1表示必须以1开头,\d表示匹配任意一个数字,{10}表示匹配前一个字符10次,$表示字符串的结束位置。可以使用re.match函数来匹配手机号码:

import re
​
pattern = r'^1\d{10}$'
string = '12312345678'
match = re.match(pattern, string)
if match:print('匹配成功')
else:print('匹配失败')

输出结果为:

匹配成功

匹配邮箱地址

邮箱地址通常包含@符号和.符号,使用正则表达式可以匹配符合这种模式的邮箱地址。以下是一个匹配邮箱地址的正则表达式:

pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'

其中,[a-zA-Z0-9._%±]表示匹配任意一个字母、数字、下划线、点、百分号、加号、减号,
+表示匹配前一个字符1次或多次,@表示匹配@符号,[a-zA-Z0-9.-]表示匹配任意一个字母、数字、点、减号,.[a-zA-Z]{2,}表示匹配.符号和至少两个字母的组合。可以使用re.match函数来匹配邮箱地址:

import re
​
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
string = 'example@example.com'
match = re.match(pattern, string)
if match:print('匹配成功')
else:print('匹配失败')

输出结果为:

匹配成功

替换字符串

使用正则表达式可以替换字符串中符合特定模式的部分。以下是一个替换字符串的示例:

import re
​
pattern = r'\d+'
string = 'a1b2c3d4'
replacement = 'X'
new_string = re.sub(pattern, replacement, string)
print(new_string)

输出结果为:

aXbXcXdX

在上面的示例中,\d+表示匹配任意一个数字,re.sub函数将字符串中所有匹配到的数字替换为X


[Python]切片完全指南(语法篇)
python——列表生成式
【全文干货】python—函数详解(值得收藏的学习手册)
python中requests库使用方法详解
详解Python模块化——模块(Modules)和包(Packages)
Python sorted()函数的高级使用(多条件)
python 生成器 generator 详解
玩转Python正则表达式:实用教程带你快速入门
Python正则表达式入门
Python3 正则表达式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/132739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【移远QuecPython】EC800M物联网开发板的内置GNSS定位的恶性BUG(目前没有完全的解决方案)

【移远QuecPython】EC800M物联网开发板的内置GNSS定位的恶性BUG&#xff08;目前没有完全的解决方案&#xff09; GNSS配置如下&#xff1a; 【移远QuecPython】EC800M物联网开发板的内置GNSS定位获取&#xff08;北斗、GPS和GNSS&#xff09; 测试视频&#xff08;包括BUG复…

简单CMake入门

CMake可以生成不同平台下的Makefile&#xff0c;有了CMake不用再写复杂的Makefile 视频教程&#xff1a;CMake 6分钟入门&#xff0c;不用再写复杂的Makefile 先前知识 Makefile简单入门 Cmake特性 CMake是一个用于管理C/C项目的跨平台构建工具。 跨平台&#xff1a;CMake是…

【漏洞复现】Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 1.5、深度利用1、反弹Shell 说明内容漏洞编号CVE-2017-5645漏洞名称Log4j Server …

判断字符串是否为json

//营业时间返回数组String businessDate merchantInfoResp.getBusinessDate();Object obj JSON.parse(businessDate);if (obj instanceof JSONArray) {merchantInfoResp.setBusinessDateDesc(JSON.parseArray(JSON.toJSONString(obj), Integer.class));} else {//营业日期判断…

Ubuntu下安装vscode,并解决终端打不开vscode的问题

Visual Studio Code安装 1&#xff0c;使用 apt 安装 Visual Studio Code 在官方的微软 Apt 源仓库中可用。按照下面的步骤进行即可&#xff1a; 以 sudo 用户身份运行下面的命令&#xff0c;更新软件包索引&#xff0c;并且安装依赖软件&#xff1a; sudo apt update sud…

09 基变换

基变换 基本概念坐标转换詹妮弗坐标系→平面直角坐标系平面直角坐标系→詹妮弗坐标系转换对比基本原则 这是关于3Blue1Brown "线性代数的本质"的学习笔记。 基本概念 对于右手平面直角坐标系&#xff0c;一般用 i ⃗ \vec{i} i 和 j ⃗ \vec{j} j ​表示其基向量。…

86.Linux系统下复制进程fork(逻辑地址和物理地址)

目录 fork复制进程 逻辑地址和物理地址 fork复制进程 fork 是一个系统调用&#xff0c;在 Linux/Unix 系统中用于创建一个新的进程&#xff0c;新进程称为子进程。子进程是父进程的副本&#xff0c;它从父进程那里继承了大部分属性和资源&#xff0c;包括代码、数据、打开的文…

VMware 虚拟机安装 CentOS 7

CentOS 7 1. 下载CentOS 7 iso镜像 Index of /centos/7.9.2009/isos/x86_64/ 2. Vmware安装CentOS 7 安装教程&#xff1a; 超详细VMware CentOS7(最小安装)安装教程_虚拟机最小化安装-CSDN博客 【精选】VMware 安装 Centos7 详细过程_vm虚拟机安装centos7_expectation Fu…

网络原理---封装和分用

文章目录 什么是封装和分用&#xff1f;封装应用层传输层网络层数据链路层物理层 分用物理层数据链路层网络层传输层应用层 什么是封装和分用&#xff1f; 我们前面讲过协议会分层&#xff0c;每一层都有各自的功能。而在数据传输的过程中&#xff0c;得按照顺序把每一层协议都…

【ArcGIS微课1000例】0077:ArcGIS生成经纬网(shp格式)

使用ArcGIS制图的时候,可以很方便的生成经纬网、方里网及参考格网,但是在需要shp格式的经纬网,进一步在南方cass中使用经纬网的时候,就需要单独生成了。 如下图所示为全球大陆矢量数据,我们基于该数据来生成全球指定间距的经纬网数据。 在ArcGIS中,生成经纬网和方里网均…

音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法

一、介绍 音乐推荐与管理系统。本系统采用Python作为主要开发语言&#xff0c;前端使用HTML、CSS、BootStrap等技术搭建界面平台&#xff0c;后端使用Django框架处理请求&#xff0c;并基于Ajax等技术实现前端与后端的数据通信。在音乐个性推荐功能模块中采用通过Python编写协…

ARMday1

1、计算机的组成 输入设备-输出设备-运算器-控制器-存储器 输入设备&#xff1a;键盘、鼠标、手柄、扫描仪 输出设备&#xff1a;显示屏、打印机、音响 存储器&#xff1a;存放数据以及指令、是实现“程序存储控制”的基础、外存、内存、cache、寄存器 控制器&#xff08;…

django安装数据库

使用pip安装django pip3 install django注意我使用的是python3所以用pip3安装&#xff0c;如需安装指定版本 django ..* 检测是否安装成功,不报错&#xff0c;则安装成功 # python3 # import django下边这是报错的 django迁移数据库 再mysql中简历数据库 CREATE DATABA…

chinese-stable-diffusion中文场景文生图prompt测评集合

腾讯混元大模型文生图操作指南.dochttps://mp.weixin.qq.com/s/u0AGtpwm_LmgnDY7OQhKGg腾讯混元大模型再进化&#xff0c;文生图能力重磅上线&#xff0c;这里是一手实测腾讯混元的文生图在人像真实感、场景真实感上有比较明显的优势&#xff0c;同时&#xff0c;在中国风景、动…

【PyQt学习篇 · ⑪】:QPushButton和QCommandLinkButton的使用

文章目录 构造函数菜单设置扁平化默认处理右键菜单QCommandLinkButton的使用 构造函数 QPushButton的构造函数如下&#xff1a; """QPushButton(parent: Optional[QWidget] None)QPushButton(text: Optional[str], parent: Optional[QWidget] None)QPushButt…

【QT】 Qt自定义ui控件

在使用Qt的ui设计时&#xff0c;Qt为我们提供了标准的窗口控件&#xff0c;但是在很多复杂工程中&#xff0c;标准窗口控件并不能满足所有的需求&#xff0c;这时就需要我们自定义控件。我们自定义的类既可以作为独立的窗口显示&#xff0c;又可以作为一个控件显示。 我们要实现…

Flink SQL DataGen Connector 示例

Flink SQL DataGen Connector 示例 1、概述 使用 Flink SQL DataGen Connector&#xff0c;可以快速地生成符合规则的测试数据&#xff0c;可以在不依赖真实数据的情况下进行开发和测试。 2、使用示例 创建一个名为 “users” 的表&#xff0c;包含 6 个字段&#xff1a;id…

【Leetcode】349. 两个数组的交集

题意 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 说明&#xff1a; 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 思路 这道题目&#xff0c;主要要学会使用一种哈希数据结构&#xff1a;unordered_set&#xff0c;这个数据结构可以解决…

【Redis】hash数据类型-常用命令

文章目录 前置知识常用命令HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGET关于HMSETHLENHSETNXHINCRBYHINCRBYFLOAT 命令小结 前置知识 redis自身就是键值对结构了&#xff0c;哈希类型是指值本⾝⼜是⼀个键值对结构&#xff0c;形如key"key"&#xff0c;value{{field1…

windows10编译高版本openssl

参考文章 参考文章中的windows编译为低版本&#xff0c;在高版本的openssl编译中已经没有&#xff1a;“ms\do_ms.bat”这个脚本了&#xff0c;现记录下编译过程 1、准备工作 安装ActivePerl&#xff0c;安装后会自动写入环境变量&#xff0c;参照参考文章测试安装成功与否&a…