Python基础和变量使用

news2024/11/15 17:16:08

1. 基础了解

1.1 运行方式

Python有多种运行方式,以下是几种常见的执行Python代码的方法:

  • 交互式解释器: 打开终端或命令提示符,输入python或python3(取决于你的系统配置),即可进入Python交互模式。你可以直接输入代码并立即看到结果。
  • 脚本文件执行: 将Python代码保存到一个.py扩展名的文件中,例如hello.py。然后在终端或命令行中,通过python hello.py或python3 hello.py命令来运行这个脚本。
  • 集成开发环境(IDE): 如PyCharm、VS Code(配Python插件)、Jupyter Notebook等,这些环境提供了编辑、调试和运行Python代码的图形界面。
  • 在线编程平台: Repl.it、Google Colab、JupyterHub等在线平台允许用户在网页上编写并运行Python代码,无需本地安装Python环境。
  • 模块导入与作为库使用: Python代码也可以被其他Python程序作为模块导入并执行,这种方式常用于组织大型项目或开发库供他人使用。
  • 嵌入式Python: Python可以嵌入到其他应用程序中,允许在非Python环境中执行Python代码,如C/C++程序通过Python API调用Python函数。

每种方式有其特定的使用场景和优势,可根据需求选择合适的运行方式。

1.2 注释

  • 注释的作用:
  • 对关键代码的解释说明;
  • 被注释的代码不会被执行;
  • 增强代码的可读性;
  • 注释的分类:
  1. 单行注释:以#号开头,右边的所有东西都被当做说明文字,程序不进行编译运行。
# 输出
# print("he1lo wor1d")     #  注释

单独一行的注释,# 后面建议先添加一个空格,然后再编写相应的说明文字;

代码后面增加的单行注释,注释应该至少离开代码 2 个空格;

  1. 多行注释三个单引号’‘’ ‘’’ 或三个双引号 “”" “”"
'''
这是第一行
这是第二行
'''

"""
这是第三行
这是第四行
"""
  1. 注释不能乱用

如果外面使用三个单引号,则里面要使用三个双引号,反之亦然。即,在嵌套使用注释的时候,两种多行注释形式交替使用

  1. 注释的排错性

先注释一部分代码,然后执行另外一部分,看看是否报错,逐层缩小报错范围,找到最终错误点。

关于代码规范

  • Python 官方提供有一系列 PEP(Python Enhancement Proposals) 文档
  • 其中第 8 篇文档专门针对 Python 的代码格式 给出了建议,也就是俗称的 PEP 8
  • 文档地址:https://www.python.org/dev/peps/pep-0008/
  • 谷歌有对应的中文文档:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/

1.3 缩进规则

Python的缩进规则是Python语法中非常重要且独特的部分,它用来表示代码块的层次结构。Python中没有使用大括号 {} 来界定代码块,而是依靠缩进来区分代码块的开始和结束。
Python缩进规则的需要注意;

  1. 一致性:同一个代码块内的所有语句必须使用相同数量的空格或制表符进行缩进。推荐使用4个空格作为标准缩进量,虽然也可以使用制表符,但混合使用空格和制表符会导致错误。
  2. 严格性:Python解释器会严格检查代码块的缩进,不正确的缩进会导致IndentationError错误。
  3. 代码块定义:如if语句、for循环、while循环、def函数定义、class类定义等结构后面的第一行语句必须缩进,表示它们属于该代码块。
  4. 连续语句:同一代码块内连续的多行代码必须保持相同的缩进级别。
  5. 嵌套结构:如果一个代码块内部还有其他代码块(即嵌套结构),则内部代码块需要比外部代码块更进一步的缩进。
  6. 反向缩进结束代码块:当回到与上一层代码块相同的缩进级别时,表示当前代码块结束。对于像if语句这样可能只有单行执行语句的情况,即使只有一行,也需要正确缩进。

2. 变量

变量就是可以变化的量,量指的是事物的状态,比如人的年龄、性别,游戏角色的等级、金钱等等
为了让计算机能够像人一样去记忆事物的某种状态,并且状态是可以发生变化的。

详细地说:程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时的状态。

2.1 变量的基本使用

变量使用的原则:先定义,后引用

name = 'zhangsan'     # 定义 -> 存(开辟一个内存空间,绑定变量名)

print(name)           # 引用 -> 取(通过变量名访问变量值)

补充知识:(了解即可)

内存管理:垃圾回收机制

  • 垃圾回收机制(简称GC)是Python解释器自带一种机制,专门用来回收不可用的变量值所占用的内存空间。
  • 当一个变量值被绑定的变量名的个数为0时,该变量值无法被访问到,称之为垃圾。
  • 原理:Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题,并且通过“分代回收”(generation collection)以空间换取时间的方式来进一步提高垃圾回收的效率。

引用计数

引用计数:变量值被变量名关联的次数

# 垃圾:当一个变量值被绑定的变量名的个数为0时,该变量值无法被访问到,称之为 垃圾

# 引用计数增加
x = 10  # 10的引用计数为1
y = x   # 10的引用计数为2
z = x   # 10的引用计数为3

# 引用计数减少
del x   # 解除变量名x与值10的绑定关系,10的引用计数变为2
print(y)     # 10 不受影响
del y   #10的引用计数变为1
print(z)     # 10 不受影响
z = 12345
print(z)     # 12345 此时 10 已经没有变量名进行引用,引用计数为0  

循环引用

# 循环引用(交叉引用)=> 导致内存泄露问题
# 循环引用会导致:值不再被任何名字关联,但是值的引用计数并不会为0,应该被回收但不能被回收
l1=[111,]
l2=[222,]

l1.append(l2) # 此时l1存放的是[值111的内存地址,l2列表的内存地址]
l2.append(l1) # 此时l2存放的是[值222的内存地址,l1列表的内存地址]

# print(id(l1[1]))
# print(id(l2))

# print(id(l2[1]))
# print(id(l1))

# print(l2)
# print(l1[1])

del l1   # 列表1的引用计数减1,列表1的引用计数变为1(还有一个间接引用)
del l2   # 列表2的引用计数减1,列表2的引用计数变为1(还有一个间接引用)
# 此时两个列表会出现永远取不到,但是引用计数不为0的情况

标记清除

# 标记清除:用来解决循环引用带来的内存泄露问题
# 内存中有两块区域:堆区与栈区,在定义变量时,变量名与值内存地址的关联关系存放于栈区,变量值存放于堆区,内存管理回收的则是堆区的内容。

在这里插入图片描述

标记/清除算法的做法是当应用程序可用的内存空间被耗尽的时,就会停止整个程序,然后进行两项工作,第一项则是标记,第二项则是清除。

1. 标记。通俗地讲就是:标记的过程就行相当于从栈区出发一条线,“连接”到堆区,再由堆区间接“连接”到其他地址,凡是被这条自栈区起始的线连接到内存空间都属于可以访达的,会被标记为存活
具体地:标记的过程其实就是,遍历所有的GC Roots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),然后将所有GC Roots的对象可以直接或间接访问到的对象标记为存活的对象,其余的均为非存活对象,应该被清除。

2. 清除。清除的过程将遍历堆中所有的对象,将没有标记存活的对象全部清除掉。

直接引用指的是从栈区出发直接引用到的内存地址,间接引用指的是从栈区出发引用到堆区后再进一步引用到的内存地址,以我们之前的两个列表l1与l2为例画出如下图像:

在这里插入图片描述

当我们同时删除l1与l2时,会清理到栈区中l1与l2的内容
这样在启用标记清除算法时,发现栈区内不再有l1与l2(只剩下堆区内二者的相互引用),于是列表1与列表2都没有被标记为存活,二者会被清理掉,这样就解决了循环引用带来的内存泄漏问题。

在这里插入图片描述


分代回收

# 基于引用计数的回收机制,每次回收内存,都需要把所有对象的引用计数都遍历一遍,这是非常消耗时间的,于是引入了 分代回收 来提高回收效率,分代回收采用的是用“空间换时间”的策略。

# 分代回收的核心思想:
在历经多次扫描的情况下,都没有被回收的变量,gc机制就会认为,该变量是常用变量,gc对其扫描的频率会降低,具体实现原理如下:

1. 分代指的是根据存活时间来为变量划分不同等级(也就是不同的代)
2. 新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,如果发现变量依然被引用,那么该对象的权重(权重本质就是个整数)加一,当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,青春代的gc扫描的频率低于新生代(扫描时间间隔更长),假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,节省了扫描的总时间,接下来,青春代中的对象,也会以同样的方式被移动到老年代中。也就是等级(代)越高,被垃圾回收机制扫描的频率越低
3. 回收依然是使用引用计数作为回收的依据

在这里插入图片描述

# 分代回收的缺点:
例如一个变量刚刚从新生代移入青春代,该变量的绑定关系就解除了,该变量应该被回收,但青春代的扫描频率低于新生代,所以该变量的回收就会被延迟。

2.2 变量的三大组成部分

变量的定义由变量名等号变量值三部分组成。

变量名 = 变量值
# 变量名  相当于门牌号,指向值所在的内存地址,是访问至值的唯—方式。
# =号    为赋值符号,用来将变量值的内存地址绑定给变量名。
# 变量值  就是我们存储的数据,反映的是事物的伏态。

# 例如:
name = "jason"     #记下人的名字为"Jason"
sex ='男'          #记下人的性别为男牲
age = 18           #记下人的年龄为18岁
salary = 30080.1   #记下人的薪资为30000.1元

解释器执行到变量定义的代码时会申请内存空间存放变量值,然后将变量值的内存地址绑定给变量名.

2.3 变量名的命名的规则

变量名的命名原则:见名知意

  • 变量名只能是 字母数字下划线的任意组合

  • 变量名的第一个字符不能是数字

  • 关键字不能声明为变量名,常用关键字如下:

import keyword;          # 引入模块
print(keyword.kwlist);   # 打印关键字
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from','global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

PS:不要用拼音,不要用中文,在见名知意的前提下尽可能短(规范)。

变量名的命名风格

  • 纯小写加下划线的方式(在python中,关于变量名的命名 推荐 使用这种方式)

    age_of_alex = 73
    print(age_of_alex)
    
  • 大驼峰法(首字母大写)

    AgeOfAlex = 73
    print(AgeOfAlex)
    

2.4 变量值三个重要的特征

  • id:反映的是变量值的内存地址,内存地址不同id则不同

  • type:不同类型的值用来表示记录不同的状态

  • value:值本身

name = 'zhangsan'

print(id(name))    # id = 2429388598384 
print(type(name))  # <class 'str'>
print(name)        # zhangsan

补充:

is 与 == 的区别

  • is:比较左右两个值身份id是否相等
  • ==:比较左右两个值他们的值value是否相等

id不同的情况下,值有可能相同,即两块不同的内存空间里可以存相同的值

id相同的情况下,值一定相同,x is y成立,x == y也必然成立

x='info:18'
y='info:18'
print(x,y)
info:18 info:18     # value相同

print(id(x),id(y))
4565819264 4566192176   # id不同

print(x == y)  # True
print(x is y)  # False

内存优化机制:小整数池[-5,256]

  • 从python解释器启动那一刻开始,就会在内存中事先申请好一系列内存空间存放好常用的整数。
  • 其取值范围在[-5,256]之间。
x=-5
y=-5
print(x is y)   # True

x=-6
y=-6
print(x is y)   # False

2.5 常量:不变的量

注意:python语法中没有常量的概念,但是在程序的开发过程中会涉及到常量的概念。

小写字母全为大写代表常量,这只是一种约定、规范。

AGE_OF_ALEX = 73
AGE_OF_ALEX = 74

单从语法层面去讲,常量的使用与变量完全一致。

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

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

相关文章

HelpLook AI 知识库:为企业提供高效智能的知识管理解决方案

“管理就是把复杂的问题简单化&#xff0c;混乱的事情规范化。” 在当今竞争激烈的商业环境中&#xff0c;企业面临着快速变化的市场需求和日益复杂的业务流程。为了保持竞争力并提升运营效率&#xff0c;选择一款合适的知识管理系统至关重要。在众多选项中&#xff0c;HelpLoo…

day05--Vue

一、Vue入门 1.1入门案例 1.在页面中引入vue.js框架 2.定义vue对象 let app new Vue({ el:"#vue作用域的div标签id", data:{ //所有数据模型 }&#xff0c; methods:{ //页面中所有触发的js方法 }&#xff0c; created(){ //页面初始化&#xff0c;准备调用方法 } …

MODELSIM仿真报错解决记录

目录 问题&#xff1a;Modelsim报错&#xff1a;Error (10228): Verilog HDL error at Line_Shift_RAM_1Bit.v(39): module “Line_Shift_RAM_1 原因&#xff1a;创建的IP核放到了别的位置 解决方法&#xff1a;删掉IP核以及QIP等文件&#xff0c;将IP核创建到工程目录下 问…

vue3旋转木马型轮播图,环型滚动

<template><div><div class"content"><div class"but1" click"rotateLeft">--向左</div><div class"ccc"><main id"main"><div class"haha" ref"haha"&g…

垂直电商的兴衰与开源AI智能名片S2B2C商城系统的崛起:一场商业模式的革新

摘要&#xff1a;随着互联网技术的飞速发展&#xff0c;电子商务行业经历了从萌芽到繁荣再到精细化分化的历程。垂直电商作为电商领域的一个重要分支&#xff0c;曾因其聚焦细分市场、满足特定用户需求、产品标准化及快速整合供应链等优势&#xff0c;吸引了大量资本的关注。然…

Ubuntu上安装Redis的详细教程

1、安装redis 首先&#xff0c;访问Redis官网&#xff0c;点击首页的【Get Started】&#xff0c;然后点击Install Redis on Linux 安装 终端依次输入以下命令&#xff0c;如果过程中没有错误提示&#xff0c;则redis安装完成。 sudo apt install lsb-release curl gpg cu…

【前端】NodeJS:会话控制

文章目录 1 介绍2 cookie2.1 cookie是什么2.2 cookie的特点2.3 cookie的运行流程2.4 浏览器操作cookie2.5 cookie的代码操作 3 session3.1 session是什么3.2 session的作用3.3 session运行流程3.4 session的代码操作 4 session和cookie的区别5 token5.1 token是什么5.2 token的…

网络安全之xss靶场练习

目录 一、xss靶场练习 1、Ma Spaghet! 2、Jefff 第一个方法 第二个方法 3、Ugandan Knuckles 4、Ricardo Milos 5、Ah Thats Hawt 6、Ligma 7、Mafia​编辑 8、Ok, Boomer 一、xss靶场练习 靶场地址 https://xss.pwnfunction.com/ 页面显示如下 1、Ma Spaghet! 分析…

旧版Pycharm支持的python版本记录

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;旧版Pycharm支持的python版本记录-CSDN博客 前言&#xff1a;近期由于打算研究GitHub上一个开源量化交易平台开发框架&#xff0c;但是该框架是基于python3.10的版本开发&#xff0c;所…

海康VisionMaster使用学习笔记5-开机自启动

开机自启动 在实际应用中&#xff0c;用户会希望机台上电开机后&#xff0c;软件能自启动避免现场人员误操作&#xff0c;减少机台重新上电时的操作步骤以提升效率。 设置 打开VM,点击设置,软件设置->开机自启动->勾选开机自启动->确定 默认运行界面 启动时以设定的…

MapReduce原理和操作

目录 一、MapReduce开发1. 数据处理的过程&#xff08;MapReduce&#xff09;2. 入门案例 二、MapReduce的高级特性1. 序列化2. 排序3. 分区4. Combiner——合并5. Shuffle——洗牌 一、MapReduce开发 1. 数据处理的过程&#xff08;MapReduce&#xff09; 注意 JobMapReduce&…

不同操作系统中如何搭建RabbitMQ开发环境?

大家好&#xff0c;我是袁庭新。今天介绍在不同操作系统中如何搭建RabbitMQ开发环境&#xff1f; 在使用RabbitMQ之前必须预先安装配置&#xff0c;参考RabbitMQ官网说明&#xff0c;RabbitMQ支持多平台安装&#xff0c;例如Linux、Windows、macOS、Docker等。不同架构的芯片对…

通过电影之镜,探索美的无限可能

通过电影之镜&#xff0c;探索美的无限可能&#xff1a;以《至爱梵高星空之谜》、《阳光灿烂的日子》与《这个杀手不太冷》为例 在光影交错的世界里&#xff0c;电影不仅是故事的讲述者&#xff0c;更是审美的引领者。三部风格迥异却同样引人入胜的电影——《至爱梵高星空之谜…

SSM学生社团管理系统—计算机毕业设计源码无偿分享20360

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 学生社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系…

海康VisionMaster使用学习笔记8-OKNG计数方案

OKNG计数方案 1. 添加图像源 2. 添加圆弧边缘缺陷检测 基本参数 自行绘制ROI,在图像上拖动小圆,圈住被测物 运行参数 边缘类型:选择最强边缘极性:由黑到白 缺陷距离阈值: 10 结果显示 为方便查看,文本显示内容设置为:检测结果:{} 光标移动到{}中间,选择模块状态 执行结果…

DeepSeek开源数学大模型,高中、大学定理证明新SOTA

DeepSeek-Prover-V1.5 通过结合强化学习和蒙特卡洛树搜索&#xff0c;显著提升了证明生成的效率和准确性。 AI 技术与数学发现的进展&#xff0c;正前所未有地交织在一起。 前段时间&#xff0c;著名数学家陶哲轩在牛津数学公开讲座中做了主题为「AI 在科学和数学中的潜力」的主…

利用modelscope下载模型

1. modelscope的简介 ModelScope作为一个先进的“模型即服务”(MaaS)平台&#xff0c;它的核心在于汇聚人工智能领域的尖端模型&#xff0c;降低了在现实世界应用这些前沿技术的门槛。该平台通过ModelScope库展现了其强大功能&#xff0c;这一库专为简化开发者体验而设计&…

CyberLink PowerDVD v23.0解锁版下载和安装教程 (专业蓝光影音播器)

前言 CyberLink PowerDVD 是一款全球专业蓝光影音播放软件&#xff0c;新版全新64位播放引擎&#xff0c;改进了8K超清视频播放、更高分辨率高清视频处理&#xff0c;同时4K视频后期处理还新增了色彩校正、对比度增强、HDR等。另外&#xff0c;新版支持HEIC/HEIF图像格式&…

【vue3动画】基于侦听器的动画

今天没事翻Vue3文档的时候看见一个不错的动画效果&#xff0c;做个记录&#xff0c;以后可能会用到 Vue3文档–基于侦听器的动画效果 //代码 import { ref, reactive, watch } from vue import gsap from gsap const number ref(0) const tweened reactive({number: 0 }) …

实验室、办公室管理系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…