03-python基础
python
变量的引用
python 中函数的参数传递以及返回值都是通过引用传递的。
python 中的变量和数据分开存储,变量中存储的不是数据,而是数据的内存地址。
通过 id()
查看变量在内存中的地址。
因此,当改变变量的时候,其实是改变了变量所保存的地址,也就是 修改了数据的引用。
可变和不可变类型
数据类型中分为可变类型和不可变类型,
可变类型是列表、字典和集合,其中的数据元素可以变化。
不可变类型是数字类型、字符串和元组。其中定义后就不能变化。
不可变意味着定义后不能变化,而非变量名不能去引用其他数据。
str = 'hello'
str[0] = 'H' # error 不可变类型,会引发TypeError
字典中的key 只能使用不可变类型。
可变类型的数据变化,是通过方法来实现的。
python中有一个hash函数,通过接收一个不可变类型的参数,返回一个整数。
字典中的数据存储时,会先调用hash获取key的特征码,随后再进行存储,也就是说,字典体现的就是哈希表。
局部变量和全局变量
局部变量是定义在函数内部的变量,函数执行结束,资源清理回收。
全局变量是定义在函数外部的变量,全局都可以使用。
-
函数执行时,会首先在函数内部查找存不存在指定名称的局部变量,如果存在,则直接使用。
-
如果没有,则查看全局位置是否存在指定名称的全局变量,如果存在,则直接使用
-
若还未找到,则报错
函数不能修改全局位置的变量的引用,或者说,即使想要修改,也不过是定义了一个和全局变量同名的一个变量。
num = 10
def func():
num = 100 # 此处并非修改num,而是定义了一个名为num,值为100的变量。
函数内部不能修改全局变量。如果需要修改全局变量,则需要显式声明该变量为 global
num = 10
def func():
global num # 此处表明num是一个全局变量
num = 100
代码结构
shebang:#!标识
import 模块
全局变量
函数定义
执行代码
为了将全局变量和局部变量相区分,可以在全局变量前添加 g_ 前缀。
高级变量类型
列表、元组、字典、字符串、公共方法、变量高级、集合(Set)
列表
列表以【】包含,下标从 0 开始,是其他语言中的数组。
name_list = ['abc', 'xyz']
如果获取值时,索引超过了范围,则报错。
len(列表) 获取列表的长度
列表.count(数据) 获取该数据在列表中出现的次数
列表[索引] 从列表中取值
列表.index(数据) 获取数据第一次出现时的索引
del 列表[索引] 删除指定索引的数据
列表.sort() 升序排序
列表.sort(reverse=True) 降序排序
列表.reverse() 反转
列表.remove[数据] 删除第一个出现的指定数据
列表.pop 删除末尾数据
列表.pop(索引) 删除指定索引的数据
列表.insert(索引,数据) 在指定位置插入数据
列表.append(数据) 在末尾追加数据
列表.extend(列表2) 将列表2的数据追加到列表1
列表.clear() 清空数据
记住几个常用的就可以了,用到的时候再查询。
del 不仅可以删除列表中的数据,还可以直接删除列表。
关键字
keyword 是关键字。
import keyword
print(keyword.kwlist)
print(len(keyword.kwlist))
方法和函数类似,但方法需要通过对象 . 的形式进行调用。
循环遍历
从头到尾以此从列表中获取数据,在循环体内部针对每一个元素,执行相同操作。
使用for in
就可以实现
name_list = ['abc', 'xyz']
for name in name_list:
print(name)
元组
元组是用小括号包裹起来的列表,列表和元组之间可以通过关键字 list 或 tuple 进行相互转换。
元组中的值不可以改变,这个特性可以保护元组中的值。
字典
字典是使用 {} 包含起来的,由键值对进行组合。
info_dict = {"key":"value"}
value 可以使用任意数据类型,但key只能使用不可变类型,如数值、字符串等。
默认参数
python 中的函数支持默认参数,默认参数就是函数参数的一个默认值,如果在调用该函数的时候没有写明参数,则使用默认值。默认值从后往前写,另外,如果指定了一个参数名,则后面的参数名也需要指定。
多值参数
函数处理不固定数量的参数。*arg 表示元组, ** kwargs 表示字典,且 *arg 必须在 **kwargs 之前
# 计算所有参数的和
def sum(*args):
sum = 0
for arg in args:
sum += arg
return sum
print(sum(1, 2, 3, 4, 5))
刚才所演示的是将多个变量传入到一个多值参数的函数。
如果我本身就有元组或者字典的话,可以通过 拆包/解包 的方式,将元组或字典传递给函数。
def sum(*args, **kwargs):
xxx
info_tuple = (1,2,3)
info_dict = {'a':1, 'b':2}
sum(*info_tuple, **info_dict)
递归
函数可以调用其他函数,当然也可以调用自身。
但是需要创建一个出口,如果没有出口,递归就会成为死循环。
def print_num(num):
print(num)
if num == 1:
return
print_num(num - 1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!