python初学者知识点笔记更新

文章目录

  • 1.main函数入口
  • 2.__init__.py 文件作用
  • 3.from .applications import server解释
  • 4.变量没有修饰,直接创建使用
    • 1. 内置数据类型和函数
    • 2. 类和对象
    • 3.总结
  • 5.mod = app.__module__
  • 6.集合对比区分
    • 集合类型:
    • 混合集合类型
  • 7.安装包失败

1.main函数入口

老程序员欢迎加入扣扣组织,783092701

if __name__ == '__main__':

这段代码是Python的程序入口,它会在程序运行时自动执行。在Python中,如果想让一个文件作为程序运行,需要在文件的第一行添加__name__ == '__main__'这行代码。这行代码的作用是让Python知道该文件是否是程序的入口文件,如果是,则执行文件中的代码。

2.init.py 文件作用

init.py 文件是一个特殊文件,它的存在告诉Python解释器这个目录应该被视为一个Python包(package)。这个文件可以是空的,但它必须存在(在Python 3.3及以后的版本中,对于纯Python包来说,init.py 文件不再是必需的,但如果你希望包在旧版本的Python中也能工作,或者你的包包含了一些需要在包被导入时执行的初始化代码,那么仍然需要这个文件)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在__init__函数中,可以定义该类的属性和成员变量,并对它们进行初始化。例如:

class Person:def __init__(self, name, age):self.name = nameself.age = age

这段代码是Python类的构造函数,它用于初始化类的对象。

3.from .applications import server解释

从当前包(即包含这个导入语句的文件的包)中导入名为 applications 的子包或模块,并从这个子包或模块中进一步导入名为 server 的内容

对比 from fastapi import FastAPI
从fastapi这个包中导入FastAPI类

4.变量没有修饰,直接创建使用

函数式编程,有些东西都不知道哪里来的就用起来了
直接创建变量使用,这个名可以不叫response
在这里插入图片描述
分析,response = await call_next(request) 这行代码之所以不需要对 response 进行额外的修饰(比如使用 async 关键字),是因为 await 已经处理了异步调用的等待和结果接收。这里的 response 变量简单地用于存储 await call_next(request) 执行完成后的结果,这个结果通常是下一个中间件或路由处理函数返回的响应对象。

1. 内置数据类型和函数

对于Python的内置数据类型(如整数、浮点数、字符串、列表、元组、字典、集合等)和内置函数,你通常不需要显式地定义对象来使用它们。这些类型和函数已经存在于Python的内置命名空间中,你可以直接使用它们。

# 使用内置数据类型  
num = 10  # 整数  
text = "Hello, World!"  # 字符串  
lst = [1, 2, 3]  # 列表  # 使用内置函数  
result = len(lst)  # 调用内置函数len来获取列表的长度

2. 类和对象

当你使用Python的类(class)来定义自己的数据结构或行为时,你需要创建(或“实例化”)类的对象来使用它。这是因为类是用于创建对象的蓝图或模板,而对象则是根据这个蓝图创建的具体实例。

class MyClass:  def __init__(self, name):  self.name = name  def greet(self):  print(f"Hello, {self.name}!")  # 实例化MyClass类  
my_object = MyClass("Alice")  # 使用对象的方法  
my_object.greet()  # 输出: Hello, Alice!

在这个例子中,MyClass 是一个类定义,它包含了一个构造函数 init 和一个方法 greet。要使用这个类,我们首先必须实例化它,创建一个对象 my_object,然后我们可以通过这个对象来调用 greet 方法。

3.总结

虽然Python是一种面向对象的语言,但它也支持函数式编程。在函数式编程中,你更倾向于使用函数而不是对象,但这并不意味着你不需要定义函数就可以直接使用它(因为你还是需要知道函数名才能调用它)。

5.mod = app.module

解释:

  • 它执行了一个特定的操作来获取与app对象相关联的模块(module)的名称。这里,app可以是一个类、函数、变量或者任何定义在某个模块中的对象。__module__是一个特殊的属性,它存在于几乎所有的Python对象中(除了内建类型和一些特殊情况),用于指示该对象是在哪个模块中定义的。
  • app.__module__返回的是一个字符串,表示app对象所在模块的名称。这个名称通常包括模块的文件名和(如果模块是包的一部分)其包的路径。

举例

  • 如果app是在名为myapp.py的文件中定义的,并且该文件位于Python的搜索路径中的某个目录下,那么app.__module__的值可能就是’myapp’(如果myapp.py位于顶层目录)或者是一个更长的路径,比如’mypackage.subpackage.myapp’(如果myapp.py是mypackage.subpackage包的一部分)。

使用场景

  • 这个特性在动态编程、调试、日志记录或任何需要知道对象来源模块的场景中都非常有用。例如,你可能想要记录一个函数或方法被调用的模块,以便更好地理解程序的执行流程或调试问题。

注意bug:
需要注意的是,对于内建类型(如int、list等)和一些特殊情况(如使用exec或eval动态创建的对象),__module__属性可能不存在或返回的值可能不是你期望的。在这些情况下,尝试访问__module__属性可能会引发AttributeError异常。

6.集合对比区分

集合类型:

列表(List),集合(Set),元组(Tuple),字典(Dictionary)

  • 有序:列表(List),元组(Tuple)
  • 不可重复:集合(Set)
  • key-value:字典(Dictionary),元组列表
  • 不可更改:元组(Tuple)
  • 大小中括号:
    {}:集合(Set),字典(Dictionary)
    []:列表(List)
    ():元组(Tuple)

混合集合类型

元组列表,元组嵌套,深嵌套,字典列表等等

print("===============定义元组,遍历输出===============")
# 元组是一种有序且不可更改的集合
fruits = ('apple', 'banana', 'cherry')
for fruit in fruits:print(fruit)print("===============定义字典,遍历输出===============")
# 字典一个无序的、可变的、有索引的集合
student_info = {'Tom': 95,'Jerry': 90,'Mary': 85,'Bob': 98}
for name, score in student_info.items():print(f"{name}: {score}")print("===============定义列表,遍历输出================")
# 定义一个列表 一种有序且可更改的集合
students = ['Alice', 'Bob', 'Charlie']
for student in students:print(student)print("===============定义set可变集合,遍历输出================")
# set集合,无序且不包含重复元素的集合
my_set = set()# 添加元素到集合
my_set.add(1)
my_set.add(2)
my_set.add(3)# 遍历输出集合中的元素
for item in my_set:print(item)
print("=====定义集合,遍历输出====")
# 定义一个集合,元素为字符串
names = {'Alice', 'Bob', 'Bob', 'Charlie'}# 使用 for 循环遍历集合中的元素
for name in names:print(name)# 创建一个不可变集合
fruits = frozenset(['apple', 'banana', 'cherry'])# 使用 for 循环遍历集合中的元素
for fruit in fruits:print(fruit)print("===============混合类型================")
print("===============定义元组列表,遍历输出================")
# 元组列表
names = [('John', 25), ('Alice', 30), ('Bob', 35)]for _, member in names:print(f"Member: {member}")# 遍历元组 set 集合
# 1. 创建一个元组 set 集合
student_scores = {'Alice': 95, 'Bob': 92, 'Charlie': 97}
# 2. 使用 for 循环遍历该集合
for student, score in student_scores.items():print(f'{student}: {score}')# 遍历元组字典
# 首先定义一个元组字典
student_info = (('Alice', 'Math', 95),('Bob', 'English', 90),('Charlie', 'Physics', 98)
)# 遍历元组字典
for student in student_info:# 提取学生姓名、课程名称和成绩name, course, score = student# 打印学生信息print(f'Student name: {name}')print(f'Course: {course}')print(f'Score: {score}')print()# 创建一个嵌套元组的例子
nested_tuple = (1, 2, (3, 4, 5), 6)# 访问嵌套元组中的元素
print(nested_tuple)  # 输出: (1, 2, (3, 4, 5), 6)
print(nested_tuple[2])  # 输出: (3, 4, 5),这是嵌套元组
print(nested_tuple[2][1])  # 输出: 4,这是嵌套元组中的第二个元素# 嵌套可以非常深
deep_nested_tuple = (1, (2, (3, (4, (5, 6)))), 7)
print(deep_nested_tuple)  # 输出: (1, (2, (3, (4, (5, 6)))), 7)
print(deep_nested_tuple[1][1])print(deep_nested_tuple[1][1][1])
print(deep_nested_tuple[1][1][1][1])
# 大模型给出的错误答案
# print(deep_nested_tuple[1][1][2][1][0])multi_nested_tuple = (1, (2, (3, (4, 5))))
print(multi_nested_tuple[1][1][1][0])# 字典列表
# 实现一个字典列表,列表中每个元素是一个字典
# 字典的键是字符串,值可以是任意类型
# 实现函数:
# 创建一个空的字典列表
def create_dict_list():return []# 添加一个元素到字典列表中
# 参数:
# dict_list - 字典列表
# key - 字典的键
# value - 字典的值
def add_element_to_dict_list(dict_list, key, value):dict_list.append({key: value})# 返回字典列表的长度
# 参数:
# dict_list - 字典列表
def get_dict_list_length(dict_list):return len(dict_list)# 返回第 index 个元素
# 参数:
# dict_list - 字典列表
# index - 元素的索引,从 0 开始计算
def get_element_from_dict_list(dict_list, index):return dict_list[index]# 修改第 index 个元素
# 参数:
# dict_list - 字典列表
# index - 元素的索引,从 0 开始计算
# key - 字典的键
# value - 字典的值
def modify_element_in_dict_list(dict_list, index, key, value):dict_list[index][key] = value# 删除第 index 个元素
# 参数:
# dict_list - 字典列表
# index - 元素的索引,从 0 开始计算
def delete_element_from_dict_list(dict_list, index):del dict_list[index]# 判断字典列表中是否包含某个元素
# 参数:
# dict_list - 字典列表
# key - 字典的键
def contains_element_in_dict_list(dict_list, key):for element in dict_list:if key in element:return Truereturn False# 遍历字典列表
# 参数:
# dict_list - 字典列表
# 遍历函数的形式为:def visit_element(element):
def traverse_dict_list(dict_list, visit_element):for element in dict_list:visit_element(element)# 示例:
dict_list = create_dict_list()
add_element_to_dict_list(dict_list, "name", "alice")
add_element_to_dict_list(dict_list, "age", 20)
print("长度:", get_dict_list_length(dict_list))
print("第 0 个元素:", get_element_from_dict_list(dict_list, 0))
modify_element_in_dict_list(dict_list, 0, "name", "alice2")
delete_element_from_dict_list(dict_list, 1)
print("长度:", get_dict_list_length(dict_list))
print("是否包含 name:", contains_element_in_dict_list(dict_list, "name"))
traverse_dict_list(dict_list, lambda x: print(x))

7.安装包失败

在这里插入图片描述

报错:
Try to run this command from the system terminal. Make sure that you use the correct version of ‘pip’ installed for your Python interpreter located at ‘F:\python-workspaces\TestEnv\venv\Scripts\python.exe’.

问题原因:

解决办法:

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

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

相关文章

vitest 单元测试应用与配置

vitest 应用与配置 一、简介 Vitest 旨在将自己定位为 Vite 项目的首选测试框架,即使对于不使用 Vite 的项目也是一个可靠的替代方案。它本身也兼容一些Jest的API用法。 二、安装vitest // npm npm install -D vitest // yarn yarn add -D vitest // pnpm pnpm …

Linux 06-01:简易shell编写

考虑一下这个与shell典型的互动:ls、ps 用下图的时间轴来表示事件的发生次序。其中时间从左向右。shell由标识为sh的方块代表,它随着时间的流逝从左向右移动。shell从用户读入字符串"ls"。shell建立一个新的进程,然后在那个进程中运…

vs code 启动react项目,执行npm start报错原因分析

1.执行 npm start错误信息:npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 npm start ~~~ CategoryInfo …

2024年5000元投影仪推荐:五千元最值得买的三款家用激光投影推荐

五千元是很多家庭购买投影仪会选择的价位,这个价位的投影一般属于中高端产品,如果懂配置,知道怎么选的朋友可以选到一款性价比颇高的投影,但是如果不会选不懂配置可能会花冤枉钱。所以五千元价位的投影该如何选择?市面…

企业知识库用不起来?试一下用HelpLook同步钉钉组织架构

提升企业管理和协同效率已成为增强竞争力的关键。企业通过知识管理,搭建内部知识库,将分散的经验和知识转化为系统化流程,减少重复解释,促进业务高效运作。这为企业提供了坚实的基础。 企业知识库面临的挑战 尽管传统知识库内容丰…

Jeecgboot vue3的选择部门组件JSelectDept如何实现只查询本级以及子级的部门

jeecgboot vue3的文档:地址 JSelectDept组件实现了弹窗然后选择部门返回的功能,但部门是所有数据,不符合需求,所以在原有代码上稍微改动了一下 组件属性值如下: 当serverTreeDatafalse的时候,从后端查询…

2024年7月9日~2024年7月15日周报

目录 一、前言 二、完成情况 2.1 特征图保存方法 2.1.1 定义网络模型 2.1.2 定义保存特征图的钩子函数 2.1.3 为模型层注册钩子 2.1.4 运行模型并检查特征图 2.2 实验情况 三、下周计划 一、前言 本周的7月11日~7月14日参加了机器培训的学习讨论会,对很多概…

通过MATLAB控制TI毫米波雷达的工作状态之TLV数据解析及绘制

前言 前一章博主介绍了如何基于设计视图中的这些组件结合MATLAB代码来实现TI毫米波雷达数据的实时采集。这一章将在此基础上实现TI毫米波雷达的TLV数据解析。过程中部分算法会涉及到一些简单的毫米波雷达相关算法,需要各位有一定的毫米波雷达基础。 TLV数据之协议解析 紧着…

数字孪生技术如何助力低空经济飞跃式发展?

一、什么是低空经济? 低空经济,是一个以通用航空产业为主导的经济形态,它涵盖了低空飞行、航空旅游、航空物流、应急救援等多个领域。它以垂直起降型飞机和无人驾驶航空器为载体,通过载人、载货及其他作业等多场景低空飞行活动&a…

React 实现五子棋

简介 本文将会基于React 实现五子棋小游戏&#xff0c;游戏规则为先让5颗棋子连成1线的一方获胜。 实现效果 技术实现 页面布局 <div><table style{{border: 1px solid #000, borderCollapse: collapse, backgroundColor: lightgray}}><tbody>{squares.ma…

普中51单片机:定时器与计数器详解及应用(七)

文章目录 引言定时器工作原理TMOD定时器/计数器工作模式寄存器定时器工作模式模式0(13位定时器/计数器)模式1(16位定时器/计数器)模式2(8位自动重装模式)模式3(两个8位计数器) 定时器配置流程代码演示——LED1间隔1秒闪烁代码演示——按键1控制LED流水灯状态代码演示——LCD160…

GaussDB DWS 详解

文章目录 GaussDB DWS 详解一、简介二、DWS的分布式架构架构概述关键组件 三、分布式查询数据查询流程SQL执行的示例 批注&#xff1a;本文引鉴了Forlogen博主的一些内容&#xff0c;并加以补充&#xff0c;以供学习了解。 GaussDB DWS 详解 一、简介 DWS(Data Warehouse Ser…

免费分享一套SpringBoot+Vue农产品在线销售(在线商城)管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue农产品在线销售(在线商城)管理系统&#xff0c;分享下哈。 项目介绍 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发…

alike-cpp 编译

1. 源码链接&#xff1a; https://github.com/Shiaoming/ALIKE-cpp 2.已经安装好显卡驱动&#xff0c;cuda&#xff0c;cudnn,没安装的参考&#xff1a; 切记装cuda-11.x的版本&#xff0c;最好cuda11.3的版本 ubuntu重装系统后&#xff0c;安装cuda,cudnn-CSDN博客 3.安装…

C++客户端Qt开发——信号和槽

三、信号和槽 1.信号和槽概述 在Qt中&#xff0c;用户和控件的每次交互过程称为一个事件。比如"用户点击按钮”是一个事件&#xff0c;"用户关闭窗口”也是一个事件。每个事件都会发出一个信号&#xff0c;例如用户点击按钮会发出"按钮被点击"的信号&…

在互联网供应链系统可能是永远不会过时的系统

一、前言 在互联网在到人工智能&#xff0c;从基本的门户网站&#xff0c;社交网站&#xff0c;到移动互联网&#xff0c;视频网站&#xff0c;再到现在比较火爆短视频直播和人工智能AI&#xff0c;大模型。互联网的迭代&#xff0c;出现了无数的系统。但是有些系统一直久经不…

剪画小程序:做自媒体要做哪些准备!

在这个数字化的时代&#xff0c;自媒体成为了许多人展现自我、实现价值的舞台。如果你是一个自媒体小白&#xff0c;怀揣着梦想和热情准备踏上这条充满挑战与机遇的道路&#xff0c;那么在出发之前&#xff0c;有一些关键的准备工作可不能忽视。 一、明确自身定位 首先要思考的…

婚恋交友语音交友小程序APP系统开发

在数字化时代&#xff0c;婚恋交友的方式也日益多样化。传统的相亲、朋友介绍等方式已经无法满足现代人快节毒的生活需求&#xff0c;更多的人开始选择通过线上平台寻找自己的另-婚恋交友语音交友小程序APP应运而生&#xff0c;为单身男女提供了个便捷、高效的交友平台。本文将…

指针!!C语言(第一篇)

指针1 指针变量和地址1.取地址操作符(&)2.指针变量和解引用操作符(*) 指针变量的大小和类型指针的运算特殊指针1.viod*指针2.const修饰指针3.野指针 assert断言指针的使用和传址调用1.strlen的模拟实现2.传值调用和传址调用 指针变量和地址 在认识指针之前&#xff0c;我们…

Iceberg概念和特性

1. 快照 Iceberg会随着时间的推进,跟踪表生命周期中的所有数据集变化,并使用快照(Snapshots)来表示每一次变化后的数据集合,每一次数据操作的事务提交均会产生一个快照,并将其记录在元数据文件(Metadata)中。 基于快照的概念,Iceberg有以下特性: 事务性:写入快照成…