Python —— 基础

news2024/9/24 21:20:27

目录

变量与引用

数据类型

赋值、深浅拷贝

控制流结构

逻辑操作符

is 与 ==

dir()

关键字(Python 3.11 )


https://www.cnblogs.com/qianfanwaer/p/14783204.html

变量与引用

        变量是原来存储数据的一个标识符,可被看作是内存的一个位置,用于保存程序运行期间可能会改变的数据值;

变量:存放对象的引用(即对象的地址),因此所需存储空间大小一致,与类型无关(变量无类型),可指向任何对象;

对象:分配的内存及存储的值,对象有地址(id),类型(type)、值(value);python中一切皆对象,一个列表,值,函数,类等都可以成为对象; 

引用:建立了变量和对象之间的关系,即变量指向对应对象;同个对象可以被多个变量引用,对象引用计数及回收机制;

如代码message=‘hello world’,python解释器完成了三件事:

  • 创建一个对象并开辟一块空间,对象id为0x020,type为str,存储的value为hello world;
  • 创建一个变量message,并保存了对象的地址;
  • 将变量和对象,通过指针链接起来;

 

可变对象和不可变对象

  • 可变对象,list、dict、set等,对变量的编辑是对本身进行编辑,不产生新对象;
  • 不可变对象,int、float、str、tuple,对变量的编辑会创建新对象;   

数据类型

        动态类型,变量类型在运行时自动确定,不是在编译时确定,无需预先声明变量的类型;灵活、易用、快速开发,在运行时类型检查,难以调试且会损失性能;

动态类型特性:

  • 无需类型声明;
  • 类型自动推断;
  • 类型可变;
  • 类型在运行时检查;

数据类型:

  • int,整形,在python中无固定最大值限制(除非内存耗尽);
    • 如10;
  • float,浮点数,使用IEEE 754标准的双精度格式表示;
    • 如3.14;
  • bool,布尔值,用于表示逻辑值 True 和 False
  • str,字符串,用于表示文本,可以使用单引号或双引号;
    • 如'hello';
  • list,列表,有序项目集合(有序是插入顺序),可包含不同类型元素,可改变(如添加、删除、更改);
    • 如[1, 'two', 3.0];
  • tuple,元组,类似列表,但不可改变;
    • 如(1, 'two', 3.0);
  • dict,字典,存储键值对的集合,键不可改变,值可是任意类型;
    • 如{'name': 'Alice', 'age': 25};
  • set,集合,存储唯一元素的集合,是无序的,不支持索引;
    • 如{1, 2, 3};
  • None,特殊类型对象,表示没有任何值,常用于表示函数没有返回值或变量尚未被赋值;
  • complex,复杂数,表示复数,如3+4j;

Python还提供了内置函数来转换数据类型,如:

  • int(): 将其他类型转换为整数;
  • float(): 将其他类型转换为浮点数;
  • str(): 将其他类型转换为字符串;
  • list(): 将其他类型转换为列表;
  • tuple(): 将其他类型转换为元组;
  • dict(): 将其他类型转换为字典;
  • set(): 将其他类型转换为集合;
##str字符串
s = "hello 'world' !" #创建字符串
s[0] #访问字符
s[7:12] #字符串切片

#字符串方法
s.upper() #输出: HELLO, WORLD!
s.lower() #输出: hello, world!
s.split(", ") #输出: ['Hello', 'world!']

#字符串拼接
message = "Hello" + ", " + "Alice" + "!" #输出: Hello, Alice!

#替换字符串
s.replace("world", "Python") #输出: Hello, Python!

#检查子字符串
"world" in s #输出: True
s.startswith("Hello") #输出: True
s.endswith("!") #输出: True

#字符串格式化
name = "Alice"
age = 25
print(f"My name is {name} and I am {age} years old.")  #输出: My name is Alice and I am 25 years old.
##list列表
mylist = [1,3.14,'hello'] #创建列表
mylist[0] #访问列表
mylist[0] = 10 #修改列表

#列表方法
mylist.append('world') #追加列表
mylist.insert(1,2) #插入列表
mylist.pop() #尾删列表
mylist.remove(2) #删除列表
mylist.clear() #清空列表
mylist.reverse() #反转列表

repeatlist = mylist*2 #重复列表
otherlist = mylist.copy() #复制列表,id不同
otherlist.extend(mylist) #扩展列表
mylist + otherlist #列表相加

len(mylist) #计算长度
del mylist[-1] #删除列表元素
mylist.count(1) #统计指定元素的个数
mylist.sort() #排序列表
mylist.index(3.14,2) #查找指定元素在列表中的位置
##tuple元组
t = (1,) #创建单个元素的元组
t = (1,3.14,'tu') #创建多个元素的元组
t = tuple([1,3.14,'tu']) #使用构造器创建元组
my_tuple[0] #访问元素
my_tuple[1:3] #切片

#合并元组
combined_tuple = t + (6, 7, 8) #输出: (1,3.14,'tu', 6, 7, 8)

#重复元组
repeated_tuple = t * 2 #输出: (1, 3.14, 'tu', 1, 3.14, 'tu')

len(my_tuple) #计算长度
my_tuple.count(3) #计算元素次数
my_tuple.index(4) #查找元素索引
##dict字典
my_dict = {'key1': 'value1', 'key2': 'value2'} #创建字典
my_dict = dict(key1='value1', key2='value2') #使用构造器创建字典
my_dict = dict([('key1', 'value1'), ('key2', 'value2')]) #从列表创建字典
my_dict['name'] #访问值

my_dict['job'] = 'Engineer' #添加元素
my_dict['age'] = 26 #修改值
del my_dict['city'] #删除元素

#获取字典的键、值和项
for key, value in my_dict.items():
    print(f"{key}: {value}")

#使用 get() 方法,获取值(可设置默认值)
my_dict.get('city', 'Unknown')  #输出: Unknown

#更新字典
another_dict = {'age': 27, 'country': 'USA'}
my_dict.update(another_dict)
print(my_dict)  # 输出: {'name': 'Alice', 'age': 27, 'job': 'Engineer', 'country': 'USA'}

'name' in my_dict  #检查键是否存在
copied_dict = my_dict.copy() #复制字典
my_dict.clear() #清空字典
##set集合
my_set = {1, 2, 3, 4, 5} #创建集合
my_set = set([1, 2, 3]) #使用构造器从列表中创建集合
my_set = set(range(5)) #使用构造器从迭代器中创建集合 
empty_set = set() #创建空集合

my_set.add(6) #添加元素
my_set.remove(2) #删除元素
my_set.discard(-1) #删除元素,元素不存在不会抛异常
my_set.pop() #头删
my_set.update({0,5,6}) #更新集合

#集合运算
another_set = {4, 5, 6, 7, 8}
union_set = my_set.union(another_set) #输出: {1, 3, 4, 5, 6, 7, 8}
intersection_set = my_set.intersection(another_set) # 输出: {4, 5}
difference_set = my_set.difference(another_set) # 输出: {1, 3}
symmetric_diff_set = my_set.symmetric_difference(another_set) # 输出: {1, 3, 6, 7, 8}

3 in my_set  #检查元素是否存在
my_set.issubset(copy_set) #检查一个集合是否是另一个集合的子集
my_set.issuperset(copy_set) #检查一个集合是否是另一个集合的超集
copy_set = my_set.copy() #复制集合
copy_set.clear() #清理集合

赋值、深浅拷贝

变量赋值,可理解为别名,如a=b,两变量都存放同一地址;

  • 不可变对象赋值,不会影响其他变量;
  • 可变对象赋值,会影响其他变量;

为防止可变对象赋值影响,有了深浅拷贝;

  • 浅拷贝,会创建新对象,但只拷贝最外层内部引用没有拷贝,其存储的值或引用,与原对象相同(但id不同);
  • 深拷贝,会对每一层都完全拷贝为新对象,相互间完全不影响;

控制流结构

选择结构

  • if ... elif ... else ...
  • match
#使用 if 语句
x = 10
if x > 0:
    print("x is positive")
elif x < 0:
    print("x is negative")
else:
    print("x is zero")
#使用 match 语句
status_code = 200
match status_code:
    case 200:
        print("OK")
    case 404:
        print("Not Found")
    case _:
        print("Unknown status code")

循环结构

  • while
  • for
#使用 while 循环
count = 0
while count < 5:
    print(count)
    count += 1
#字符串格式化
for i in range(20):
    mode = 3
    print('{0}%{1}={2}'.format(i, mode, i%mode))

控制流关键字

  • break:立即退出循环。
  • continue:跳过当前循环的剩余部分,并继续下一次循环。
  • pass:不做任何操作,常用于占位或作为占位符。

逻辑操作符

  • and 且,优先级次之;
    • 如第一个操作数为假,则不会计算第二个操作数,因为无论第二个操作数的值如何,整个表达式的结果都将是假;
  • or 或,优先级最低;
    • 如第一个操作数为真,则不会计算第二个操作数,因为无论第二个操作数的值如何,整个表达式的结果都将是真;
  • not 非,优先级最高;

is 与 ==

  • is:比较对象的身份,即检查两个对象是否是同一个对象;
  • ==:比较对象的值,即检查两个对象的内容是否相等;
#使用 is 进行身份比较
a = [1, 2, 3]
b = a
c = [1, 2, 3]

print(a is b)  # 输出: True
print(a is c)  # 输出: False

#使用 == 进行值比较
print(a == c)  # 输出: True

#NoneType 的特殊用法
none_obj = None
print(none_obj is None)  # 输出: True

dir()

  • 有参数,则列出指定参数对象的所有属性和方法;
  • 无参数,返回当前作用域内的名称列表,可以是变量、函数或类等;

关键字(Python 3.11 )

import用于导入模块;
from用于从模块导入特定对象;
as用于导入模块时指定别名;
global用于声明变量为全局作用域;
nonlocal用于声明变量为外部作用域,但不是全局作用域;
None用于表示没有值或空值的对象;
False/True用于表示布尔值的 False/True
if用于创建条件语句;
elif

用于 if 语句中,表示 “else if”;

else用于 if 和 for/while 循环中,表示没有匹配条件或循环正常结束时的代码块;
while用于创建无限循环或条件循环;
for用于创建循环;
break用于立即退出循环;

continue

用于跳过当前循环的剩余部分,并继续下一次循环;
pass用于表示一个占位符或空操作;
return用于从函数返回值;
and逻辑与操作符;
or逻辑或操作符;

not

逻辑非操作符;
in用于检查成员资格或用于迭代;
is用于比较对象的身份;
class用于定义类;
def用于定义函数;
del用于删除对象;
lambda用于定义匿名函数;
try用于测试异常处理的代码块;
except用于捕获异常;
raise用于抛出异常;
finally用于确保某些代码无论如何都会被执行,通常用于清理操作;
assert用于调试目的,在运行时检查条件是否为真;
async用于定义异步函数;
await用于等待异步函数的结果;
with用于创建上下文管理器;
yield用于定义生成器函数;

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

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

相关文章

【学习笔记】Day 7

一、进度概述 1、DL-FWI基础入门培训笔记 2、inversionnet_train 试运行——未成功 二、详情 1、InversionNet: 深度学习实现的反演 InversionNet构建了一个具有编码器-解码器结构的卷积神经网络&#xff0c;以模拟地震数据与地下速度结构的对应关系。 &#xff08;一…

Python,我来啦!!!融合多个框架语言。。

基于上次发布CSDN的自己一些想法 上次&#xff0c;从一个道友手中购买了一份轮子代码&#xff0c;主要用到的技术就是pythonmysql或sqliteflask框架&#xff0c;这里我做了二次开发。 新的改变 这里&#xff0c;我对该代码进行了一些功能拓展与语法支持&#xff0c;除了原有…

【OpenCV C++20 学习笔记】仿射变换-warpAffine, getRotationMatrix2D

仿射变换 原理概述得到仿射变换的方法 APIgetAffineTransform()函数warpAffine()函数getRotationMatrix2D()函数 示例 原理 概述 仿射变换是矩阵乘法&#xff08;线性变换&#xff09;和向量加法的结合。它包含了&#xff1a; 旋转&#xff08;线性变换&#xff09;转换&…

【递归 + 记忆化搜索优化】力扣494. 目标和

给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 ‘’ &#xff0c;在 1 之前添加 ‘-…

立体连接模式下的传播与沟通:AI智能名片小程序的创新应用与深度剖析

摘要&#xff1a;在数字化浪潮的推动下&#xff0c;信息传播与沟通方式正经历着前所未有的变革。立体连接模式&#xff0c;作为这一变革的重要产物&#xff0c;通过整合物理空间、虚拟网络空间与社群心理空间的三维联动&#xff0c;实现了信息的深度传播与高效互动。AI智能名片…

Java新手指南:从菜鸟到编程大师的趣味之路-类和对象

这里是Themberfue 本章主要介绍的是Java最重要的面向对象&#xff08;OOP&#xff09;的基础 面向对象 Java是一门纯面向对象的语言&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。用…

MySQL --- 复合查询

目录 一、多表查询 二、自连接 三、子查询 1、单行子查询 2、多行子查询 3、多列子查询 4、在from后面使用子查询 四、合并查询 1、union 2、union all 五、内连接 六、外连接 1、左外连接 2、右外连接 一、多表查询 我们需要的数据往往会来自不同的表&#xf…

redis面试(十)锁释放

自动释放 首先锁的释放分为两种&#xff0c;一种是自动释放&#xff0c;加入说加锁的线程宕机了不在了&#xff0c;我们之前说过这个。 那这个线程中的对redis这个锁不断刷新过期时间的看门狗逻辑就没有了&#xff0c;所以这个锁最多等待30s的时间就会自动过期删除&#xff0c…

文件I/O第一天作业 2024.8.8

使用系统I/O实现Linux的cat命令 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <errno.h>int main(int argc, const char *argv[]) {if(argc < 2){printf("请输…

【笔试题面试题】IO类2 知识点汇总(笔试面试题)

书接上文&#xff0c;配上前文一起实用更加&#xff0c;持续更新&#xff0c;督促自己学习 目录 1、详细描述一下什么是IO以及标准IO和文件IO的区别&#xff08;补充&#xff09; 2、什么是死锁&#xff0c;如何避免死锁&#xff08;补充&#xff09; 3、为什么引入同步互斥…

NVIDIA Triton系列09-为服务器添加模型

NVIDIA Triton系列09-为服务器添加模型 B站&#xff1a;肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) 博客&#xff1a;肆十二-CSDN博客 问答&#xff1a;(10 封私信 / 72 条消息) 肆十二 - 知乎 (zhihu.com) 前面已经用 https://github.com/triton-inferen…

基于python的百度迁徙迁入、迁出数据分析(七)

参考&#xff1a;【Python】基于Python的百度迁徙2——迁徙规模指数&#xff08;附代码&#xff09;-CSDN博客 记录于2024年8月&#xff0c;这篇是获取百度迁徙指数&#xff0c;之前我们都在讨论不同城市的迁徙比例关系&#xff0c;这篇我们来获取百度迁徙指数这个数据&#x…

大学新生入门编程的最佳路径:嵌入式领域的深入探索

对于大学新生来说&#xff0c;编程已成为一项必不可少的技能。面对众多编程语言和学习资源&#xff0c;新生们常常感到迷茫。如何选择适合自己的编程语言&#xff1f;如何制定有效的学习计划&#xff1f;如何避免常见的学习陷阱&#xff1f;本文将为你提供嵌入式领域的编程入门…

测试工具之JMeter

JMeter Apache JMeter应用程序是开源软件,是一个100%纯Java应用程序,旨在负载测试功能行为和衡量性能。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能。 JMeter是一个免费、开源、跨平台的性能测试工具,于20世纪90年代后期面世。这是一个成熟、健全且具有…

开源一套金融大模型插件(ChatGPT)

shares vscode 插件A 股量化交易系统自研金融大模型&#xff0c;复利Chat 源码地址&#xff1a; https://github.com/xxjwxc/shares

NPDP考前怎么复习?NPDP200问PDF版来啦~

距离NPDP下半年考试还有4个月的时间&#xff0c;现在正是备考的黄金期。 以下复习建议~ 01.制定详细计划 首先&#xff0c;根据考试大纲&#xff0c;可以将内容划分为几个模块&#xff0c;如新产品开发流程、市场研究、产品规划等&#xff0c;并为每个模块设定学习目标和时间…

C语言 | Leetcode C语言题解之第328题奇偶链表

题目&#xff1a; 题解&#xff1a; struct ListNode* oddEvenList(struct ListNode* head) {if (head NULL) {return head;}struct ListNode* evenHead head->next;struct ListNode* odd head;struct ListNode* even evenHead;while (even ! NULL && even->…

`【《Spark SQL 深度探索:内置函数、数据源处理与自定义函数实践》】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;本阶段和大家一起分享和探索大数据技术Spark—SparkSQL&#xff0c;本篇文章主要讲述了&#xff1a;Spark SQL 深度探索&#xff1a;内置函数、数据源处理与自定义函数实践等等。欢迎大家…

Netty技术全解析:MessageToMessageCodec类深度解析

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

有序数组的平方(LeetCode)

题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 解题 以下算法时间复杂度为 def sortedSquares(nums):n len(nums)result [0] * n # 创建一个结果数组&#xff0c;长度与 nums 相同le…