Python学习,记录不熟悉知识点

目录

Set(集合)

集合内置方法完整列表

根据字符串的表达式计算结果

​编辑

条件控制:

if – elif – else

match...case

循环语句:

while循环

for循环

在同一行中有多个赋值操作(先计算,再赋值):

end 关键字

Python 推导式

列表推导式:

元组推导式(生成器表达式)

 字典推导式

集合推导式:

函数

参数

匿名函数,lambda表达式

字典:

字典的创建:

遍历:

输出

format后跟着格式标识符可以更好的格式化:

try-finally 语句

super()函数

类属性与方法

类的私有属性

类的私有方法

类的专有方法:

global 和 nonlocal关键字


 本篇博客所有内容均来自于:

Python3 教程 | 菜鸟教程

Set(集合)

Python 中的集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素。集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。

在 Python 中,集合使用大括号 {} 表示,元素之间用逗号 , 分隔。另外,也可以使用 set() 函数创建集合。

注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

集合内置方法完整列表

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

根据字符串的表达式计算结果

eval(str): 用来计算在字符串中的有效Python表达式,并返回一个对象。

条件控制:

if – elif – else

1、Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else

match...case

2、在 Python 中没有 switch...case 语句,但在 Python3.10 版本添加了 match...case,功能也类似。

match...case 语法结构

match expression:
    case pattern1:
        # 处理pattern1的逻辑
    case pattern2 if condition:
        # 处理pattern2并且满足condition的逻辑
    case _:
        # 处理其他情况的逻辑

case _: 类似于 C 和 Java 中的 default:,当其他 case 都无法匹配时,匹配这条,保证永远会匹配成功。

参数说明:

  • match语句后跟一个表达式,然后使用case语句来定义不同的模式。
  • case后跟一个模式,可以是具体值、变量、通配符等。
  • 可以使用if关键字在case中添加条件
  • _通常用作通配符,匹配任何值。

循环语句:

while循环

while 循环使用 else 语句,如果 while 后面的条件语句为 false 时,则执行 else 的语句块。

语法格式如下:

while <expr>:
    <statement(s)>
else:
    <additional_statement(s)>

for循环

for循环的一般格式如下:

for <variable> in <sequence>:
    <statements>
else:
    <statements>

当循环执行完毕(即遍历完 iterable 中的所有元素)后,会执行 else 子句中的代码,如果在循环过程中遇到了 break 语句,则会中断循环,此时不会执行 else 子句。

在同一行中有多个赋值操作(先计算,再赋值):

例如:

a, b = 0, 1
a, b = b, a+b

其中代码 a, b = b, a+b 的计算方式为先计算右边表达式,然后同时赋值给左边,等价于:

n=b
m=a+b
a=n
b=m

end 关键字

关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符:

 print(b, end=',')

Python 推导式

Python 支持各种数据结构的推导式:

  • 列表(list)推导式
  • 元组(tuple)推导式
  • 字典(dict)推导式
  • 集合(set)推导式

列表推导式:

[表达式 for 变量 in 列表] 
[out_exp_res for out_exp in input_list]

或者 

[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]

元组推导式(生成器表达式)

(expression for item in Sequence )
或
(expression for item in Sequence if conditional )

元组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 [],另外元组推导式返回的结果是一个生成器对象。

 字典推导式

{ key_expr: value_expr for value in collection }

或

{ key_expr: value_expr for value in collection if condition }

集合推导式:

{ expression for item in Sequence }
或
{ expression for item in Sequence if conditional }

函数的参数传递:

在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

python 函数的参数传递:

  • 不可变类型:类似 C++ 的值传递,如整数、字符串、元组。如 fun(a),传递的只是 a 的值,没有影响 a 对象本身。如果在 fun(a) 内部修改 a 的值,则是新生成一个 a 的对象

  • 可变类型:类似 C++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

函数

参数

以下是调用函数时可使用的正式参数类型:

  • 必需参数
  • 关键字参数
  • 默认参数
  • 不定长参数

不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数。

  • 加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。
  • 加了两个星号 ** 的参数会以字典的形式导入。
  • 如果单独出现星号 *,则星号 * 后的参数必须用关键字传入

匿名函数,lambda表达式

Python 使用 lambda 来创建匿名函数。

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,内联函数的目的是调用小函数时不占用栈内存从而减少函数调用的开销,提高代码的执行速度。

语法

lambda 函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

例如:

#!/usr/bin/python3
 
# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
 
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 ))

lambda 函数通常与内置函数如 map()、filter() 和 reduce() 一起使用,以便在集合上执行操作。

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared)  # 输出: [1, 4, 9, 16, 25]

 原文链接:Python3 函数 | 菜鸟教程

字典:

字典的创建:

一对大括号创建一个空的字典:{}。

遍历:

 在字典中遍历时,关键字和对应的值可以使用 items() 方法同时解读出来:

knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
    print(k, v)

 同时遍历两个或更多的序列,可以使用 zip() 组合:

 遍历两个序列:

questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
     print('What is your {0}?  It is {1}.'.format(q, a))

 遍历三个序列:

questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
add = [1, 2 , 3]

for q, a, t in zip(questions, answers, add):
    print('What is your {0}?  It is {1}. {2}'.format(q, a, t))

输出

  • str(): 函数返回一个用户易读的表达形式。
  • repr(): 产生一个解释器易读的表达形式。
  • 字符串对象的 rjust() 方法, 它可以将字符串靠右, 并在左边填充空格。还有类似的方法, 如 ljust() 和 center()。 这些方法并不会写任何东西, 它们仅仅返回新的字符串。另一个方法 zfill(), 它会在数字的左边填充 0,

  • str.format() 的基本使用如下:
     

    1. 括号及其里面的字符 (称作格式化字段) 将会被 format() 中的参数替换。
    2. 在括号中的数字用于指向传入对象在 format() 中的位置;

    3. 如果在 format() 中使用了关键字参数, 那么它们的值会指向使用该名字的参数。

    4. 位置及关键字参数可以任意的结合。

format后跟着格式标识符可以更好的格式化:

 1)可选项 : 和格式标识符可以跟着字段名。 这就允许对值进行更好的格式化。

import math
print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi))

 或者:

import math
print('常量 PI 的值近似为 {:.3f}。'.format(math.pi))

2)在 : 后传入一个整数, 可以保证该域至少有这么多的宽度。 用于美化表格时很有用。

try-finally 语句

super()函数

super() 函数是用于调用父类(超类)的一个方法。

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

super(type[, object-or-type])

参数

  • type -- 类。
  • object-or-type -- 类,一般是 self

Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :

实例:

FooChild 是子类,FooParent是基类(父类)

 super(FooChild,self) 首先找到 FooChild 的父类(就是类 FooParent),然后把类 FooChild 的对象转换为类 FooParent 的对象;

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class FooParent(object):
    def __init__(self):
        self.parent = 'I\'m the parent.'
        print ('Parent')
    
    def bar(self,message):
        print ("%s from Parent" % message)
 
class FooChild(FooParent):
    def __init__(self):
        # super(FooChild,self) 首先找到 FooChild 的父类(就是类 FooParent),然后把类 FooChild 的对象转换为类 FooParent 的对象
        super(FooChild,self).__init__()    
        print ('Child')
        
    def bar(self,message):
        super(FooChild, self).bar(message)
        print ('Child bar fuction')
        print (self.parent)
 
if __name__ == '__main__':
    fooChild = FooChild()
    fooChild.bar('HelloWorld')

 执行结果:

Parent
Child
HelloWorld from Parent
Child bar fuction
I'm the parent.

类属性与方法

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs

类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods

类的专有方法:

  • __init__ : 构造函数,在生成对象时调用
  • __del__ : 析构函数,释放对象时使用
  • __repr__ : 打印,转换
  • __setitem__ : 按照索引赋值
  • __getitem__: 按照索引获取值
  • __len__: 获得长度
  • __cmp__: 比较运算
  • __call__: 函数调用
  • __add__: 加运算
  • __sub__: 减运算
  • __mul__: 乘运算
  • __truediv__: 除运算
  • __mod__: 求余运算
  • __pow__: 乘方

global 和 nonlocal关键字

global修改全局变量

#!/usr/bin/python3
 
num = 1
def fun1():
    global num  # 需要使用 global 关键字声明
    print(num) 
    num = 123
    print(num)
fun1()
print(num)

如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了。

#!/usr/bin/python3
 
def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)
outer()

map() 函数

map() 函数的基本语法:

map(function, iterable)

参数解释如下:

    function:一个函数或方法
    iterable:一个或多个序列(可迭代对象)

map() 函数的作用是:对序列 iterable 中每一个元素调用 function 函数,返回一个map对象实例。这个map对象本质上来讲是一个迭代器。

面向对象:

1.自定义类的比较:

  • 默认情况下,一个自定义类的__eq__方法,功能是判断两个对象的id是否相同。
  • 默认情况下,一个自定义类的两个对象a和b,a == b 和ais b 的含义一样,都是“a和b是否指向相同的地方”。同理,a != b 和 not a is b 含义相同。
  • 默认情况下,自定义类的对象不能比较大小,因其__lt__、__gt__、__le__、__ge__方法都被设置成了None。

2.静态属性和静态方法:

3. 可哈希:

  • 自定义类的对象,默认情况下哈希值是根据对象id进行计算。所以两个对象,只要a is b不成立,a和b的哈希值就不同,就可以同时存在于一个集合内,或作为同一字典的不同元素的键。
  •  可以重写自定义类的__hash__()方法,使得对象的哈希值和对象的值相关,而不是id相关,这样值相同的对象,就不能处于同一个集合中,也不能作为同一字典不同元素的键。
  • a==b等价于a.__eq__(b)。自定义类的默认__eq__函数是判断两个对象的id是否相同。自定义类的默认__hash__函数是根据对象id算哈希值的。
  • 如果为自定义的类重写了__eq__(self,other)成员函数,则其__hash__成员函数会被自动设置为None。这种情况下,该类就变成不可哈希的。
  • 一个自定义类,只有在重写了__eq__方法却没有重写__hash__方法的情况下,才是不可哈希的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ThinkPhp8 框架使用 mysql find_in_set 函数

前言: 使用mysql 存储一些标签时 会使用逗号拼接的存储方法 比如 1,2,3,11 一般情况下 查询 1 可能会用到 like %1% 但这样查询的不够准确 因为11也会被查询到 如果每次都多一个逗号 1,2,3,11, 查询时 like %1,% 这样存储有点不太符合程序设计 解决方案 ----------- 官网…

Google Play上架:恶意软件、移动垃圾软件和行为透明度拒审解析(关于对SDK 要求,第三方插件需自查清理混淆)

近期发现很多开发者在上架过程中遇到了 《关于恶意软件、移动垃圾软件和行为透明度》相关的拒审邮件,今天来聊一下关于sdk的政策要求,希望能提供一个自查方向。如有疑问,可以关注博主后私聊进行讨论和咨询。 SDK要求要求如下用户数据政策“敏感信息访问权限和 API”政策“恶…

YOLOv8的多分类模型如何计算准确率(Accuracy)、精确率(Precision)、召回率(recall)和F1-Score模型评估参数

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

mysql 连接查询和子查询

学习了mysql基本查询&#xff0c; 接着学习连接查询和子查询。 4&#xff0c;连接查询 连接是关系数据库模型的主要特点。连接查询是关系数据库中最主要的查询&#xff0c;主要包括内连接、外连接等。通过连接运算符可以实现多个表查询。在关系数据库管理系统中&#xff0c;表建…

rsync实时同步(上行同步)

目录 一、实现实时同步 1. 定期同步的不足 2. 实时同步的优点 3. Linux内核的inotify机制 4. 发起端配置rsyncinotify 4.1 修改rsync源服务器配置文件 4.2 调整inotify内核参数 4.3 安装inotify-tools 4.4 在另一个终端编写触发式同步脚本 4.5 验证 二、使用rsync实现…

直播美颜SDK:AI视觉技术在直播平台中的创新与实践

在直播平台里&#xff0c;主播们通过各种形式的内容吸引着观众&#xff0c;而其中一项重要的技术创新便是直播美颜SDK的应用。本文将探讨这一技术在直播平台中的创新与实践。 一、直播美颜SDK的背景 随着社交媒体的兴起&#xff0c;人们对于自己的形象越来越注重&#xff0c;尤…

【php开发支付宝web支付】

首先介绍下 我用的框架ci 在吐槽下百度的其他人的写的都很垃圾&#xff0c;还不如自己看支付宝的开发手册了 1、composer安装支付宝的sdk composer require alipay/alipay-sdk-php安装完毕 不多哔哔 代码展示 先点地址登录支付宝以后再上我这重点下 支付宝沙箱地址 $ord…

C/C++中局部变量static用法实例

1. 普通局部变量存储于进程栈空间&#xff0c;使用完毕会立即释放&#xff0c;静态局部变量使用static修饰符定义&#xff0c;即使在声明时未赋初值&#xff0c;编译器也会把它初始化为0&#xff0c;并且静态局部变量存储于进程的全局数据区&#xff0c;即使函数返回&#xff0…

企业3D数字化网络展馆成为企业文化传承与发扬的圣地

在河北这片古老而富饶的土地上&#xff0c;文明的火种薪火相传&#xff0c;燕赵之风历久弥新。河北企业也多年持续稳居我国第五的宝座&#xff0c;企业文化展馆不仅是企业形象的展示窗口&#xff0c;更是企业文化传承与发扬的圣地。 与短暂的行业展会不同&#xff0c;企业展馆是…

Mac下载的软件显示文件已损坏,如何解决文件已损坏问题

当在Mac上下载的软件显示文件已损坏时&#xff0c;这可能是因为多种原因导致的&#xff0c;包括网络问题、下载中断、软件未完整下载、文件传输错误等。解决这个问题需要采取一些步骤来排除可能的原因&#xff0c;并尝试修复文件。下面将详细介绍一些常见的解决方法&#xff1a…

让WIN7运行WIN10软件的插件

GitHub - vxiiduu/VxKex: Windows 7 API Extensions 安装包才5.23M。 程序 - 属性 - VxKex&#xff1a;勾选 Enable Qt6版的Raptor登录后报错Device offline OpenSCAD的WIN10版

交易要想成功澳福总结几点

100%使用基本面分析的投资者能保证每次交易都能成功吗&#xff1f;100%使用技术分析的投资者能保证每次交易都能成功吗&#xff1f;在fpmarkets澳福看来无论是基本面分析还是技术分析都不能保证100%交易成功。 投资者不能只依赖一种分析进行投资交易。在fpmarkets澳福看来成功的…

vue3中项目优化(Web Worker的使用)

1.Web Worker的作用 本人的理解&#xff1a;js是单线程执行代码&#xff0c;也就是代码需要从上往下执行&#xff0c;而使用Web Worker后相当于分了一条线程出来执行代码&#xff0c;那么两条线程肯定是比一条线程执行的快。 2.新建Web Worker文件 在public文件夹下新建work…

【第二十六篇】Burpsuite实现请求方式修改+请求体文件选取

有时我们想将请求包的请求方法或请求体进行修改,这些操作可以由burpsuite完成,以节省时间。 文章目录 修改请求方法请求体文件选取修改请求方法 例如,某请求包的请求方法为GET: 如果我们想将其修改为POST且传递POST参数、上传文件,可以按以下步骤: 1、修改请求方法 2…

避雷!网络安全学习五大误区,你还不知道?

尽管安全问题老生常谈&#xff0c;但一些普遍存在的误区仍然可能让企业随时陷入危险境地。 为了有效应对当前层出不穷且不断变换的网络威胁&#xff0c;最大程度规避潜在风险&#xff0c;深入了解网络安全的发展趋势必不可少。即使部署了最新且最先进的硬件和解决方案并严格遵守…

LeetCode-热题100:138. 随机链表的复制

题目描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。…

【数据结构与算法】力扣 142. 环形链表 II

题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统…

倒计时 抢登CCF-C NSPW’24论文战场,4月12日截稿,等你来征服

会议之眼 快讯 2024年NSPW&#xff08;The New Security Paradigms Workshop&#xff09;即新安全范式研讨会将于 2024 年 9月16日-18日在美国宾夕法尼亚州贝德福德举行&#xff01;NSPW是一个专注于信息安全领域的年度会议&#xff0c;该会议旨在为那些挑战计算机安全领域主流…

小小算式(1 + 2) * (3 + 4)背后的大道理

目录 前缀表示法&#xff08;波兰表达式&#xff09; 中缀表达法 后缀表达法&#xff08;逆波兰表达式&#xff09; 三种表达法的相互转换 练习&#xff1a;逆波兰表达式求值 前缀表示法&#xff08;波兰表达式&#xff09; 波兰表示法&#xff08;英语&#xff1a;Polis…

第四十七周:文献阅读+AGCN+Wavenet network

目录 摘要 Abstract 文献阅读&#xff1a;结合自适应图卷积和CNN-LSTM的多站点水质预测模型 现有问题 提出方法 方法论 Adaptive graph convolution network&#xff08;自适应图卷积网络&#xff09; WaveNet network&#xff08;WaveNet网络&#xff09; CNN-LSTM混…