python知识点总结(七)

在这里插入图片描述


python知识点总结七

  • 1、堆和栈的区别
  • 2、如何在局部修改全局的变量
    • a、计算结果
    • b、计算结果
  • 3、如何修改一个enclosing变量
  • 4、关于值传递还是地址传值
  • 5、布尔类型
  • 6、逻辑运算
  • 7、字符串切片操作
  • 8、取整、取余、除数
  • 9、变量赋值
  • 10、字符串与数字相乘
  • 11、整型、浮点型、字符型之间相互转换
  • 12、关于*args和**kwargs
  • 13、位运算符
  • 14、计算结果

1、堆和栈的区别

栈(stack):

  1. 静态分配:栈是静态分配内存空间的区域,程序在运行时会自动分配和释放栈内存。

  2. 内存空间有限:栈的内存空间有限,大小受限于操作系统的设定。栈一般用于存储函数调用时的局部变量和函数调用信息。

  3. 内存分配由编译器管理:栈内存的分配和释放由编译器自动完成,不需要程序员手动干预。

  4. 内存分配的时间开销较小:栈内存的分配和释放是由编译器自动完成的,效率高,不会涉及内存管理算法的处理。

堆(Heap):

  1. 动态分配:堆是动态分配内存空间的区域,程序员可以手动申请和释放堆内存。

  2. 内存空间较大:堆的内存空间较大,可以存储动态分配的大量数据。

  3. 内存分配由程序员控制:程序员需要手动管理堆内存的分配和释放,如果分配了内存但没有释放,可能造成内存泄漏。

  4. 内存分配的时间开销较大:堆内存的动态分配和释放需要进行内存管理算法的处理,会比较耗时。

2、如何在局部修改全局的变量

a、计算结果

x = 1
print(id(x))  # todo 66666

def foo():
    x = 10
    print(id(x))  # todo 88888


foo()
print(id(x))  # todo 66666
print(x)  # todo 1

b、计算结果

x = 1
print(id(x))      # todo 66666

def foo():
    global x
    print(id(x))  # todo 66666
    x = 10
    print(id(x))  # todo 88888

foo()
print(id(x))      # todo 88888
print(x)          # todo 10

3、如何修改一个enclosing变量

x = 1
def foo1():
    x = 10
    print(id(x))            # todo 6666

    def bar():
        nonlocal x
        print(id(x))        # todo 6666
        x = 100
        print(id(x))        # todo 8888

    bar()
    print(x)                # todo 100


f = foo1()
print(x)					# 1

4、关于值传递还是地址传值

def foo5(x):
    print(id(x))    # 2256896027216
    x = 20
    print(id(x))    # 1838202907536

x = 10
print(id(x))        # 2256896027216
foo5(x)

print(x)            # 10
print(id(x))        # 1838202907216      
def foo6(x):
    print(id(x))  # 2256896027216
    x.append(4)
    print(id(x))  # 2256896027216


x = [1, 2, 3]
print(id(x))        # 2256896027216
foo6(x)
print(x)   
def foo7(x):
    print(id(x))  # 2638103028288
    x = 1000
    print(id(x))  # 重新赋值了  2638102718416


x = [1, 2, 3]
print(id(x))  # 2638103028288
foo7(x)
print(x)  # [1, 2, 3]
lst = [33, 44, 55, 66]

print(lst, id(lst))  #todo 2012092602048
lst.append(77)
print(lst, id(lst))  #todo [33, 44, 55, 66, 77] 2012092602048

lst.extend([11, 22])
print(lst, id(lst))  #todo [33, 44, 55, 66, 77, 11, 22] 2012092602048

如果是不可变对象,在函数体的修改不会影响到实际参数的值,arg1的修改为100,不会影响到n1的值
如果是可变对象,在函数体内的修改回影响到实际参数的值,arg2的修改,append(10),回影响到n2的值

5、布尔类型

零值:每一个数据类型都有一个布尔值为False的对象

print(bool(0))      #整型
print(bool(0.0))    #浮点型

print(bool("False"))
print(bool("0"))
print(bool("-1"))
print(bool({}))
print(bool([]))
print(bool(()))
print(bool(set()))

执行结果

False
False
True
True
True
False
False
False
False

在这里插入图片描述

6、逻辑运算

逻辑运算:and、or、not
真与真 真 ——》结果有假则假
真与假 假
假与真 假
假与假 假

真或真 真 ——》结果有真则为真
真或假 真
假或真 真
假或假 假

非真即假
非假即真
print(1 and 2) #2
print(1 or 2) #1
print(0 or 3) #3

先非 后与 再或

print(0 or 1 and 5)     #todo 5
str = '6>7'
print(eval(str))		False


布尔值可以转成整数计算
print(True+1)      # 2
a = None
b = 200
print(a or b)  # 200

a = 100
b = 200
print(a or b)  # 100

7、字符串切片操作

s='hello yuan'
print(s[1])
print(s[1:4])       #ell
print(s[1:4:-1])    #todo 空
print(s[-1:-4:1])   #todo 空
print(s[-4:-1:1])   #todo yua
print(s[4:1:-1])    #todo oll
print(s[::-1])    # 倒叙  nauy olleh
print(s[::-2])    # 倒叙  nu le

8、取整、取余、除数

取整:向下取整

print(19 // 3)  #todo 向下取整 6
print(19 / 3)   #todo 除数 6.333333333333333
print(19 % 3)   #todo 取余 1
print(-19 // 3)  # -7
print(-19 % 3)  # -19-(-7)*3=2

print(9 // -4)  # todo -3   向下取整   一正一副的整数公式,向下取整
print(-9 // 4)  # todo -3   向下取整

print(-8 % 3)  # todo 公式:余数=被除数-除数*商    -8-3*(-3)=1
print(8 % -3)  # todo 8-(-3)*(-3)=-1

9、变量赋值

a = 2
b = a
print(id(a))	# 1924360071504
print(id(b))	# 1924360071504
b += 2			# b开辟了一个新的内存空间
print(b)		# 4
print(a)		# 2

print(id(a))	# 1924360071504
print(id(b))	#  1924360071568

m = [1, 2]
n = m
n.append(3)
print(m)            #没有开辟新的内存地址 [1, 2, 3]

当多次赋值之后,变量名会指向新的空间

name='666'
name='888'
print(name)

10、字符串与数字相乘

字符串与数字相乘:相当于字符串拷贝了多少份

print("*"*4)   # ****

字符串与数字相加:报错

print("*" + 8)  #报错 

11、整型、浮点型、字符型之间相互转换

s1='128'
f1=98.7
s2='77.77'
f2=True
s3='hr=ello'
print('-----------int()函数,将其他数据类型转化为整数型-----------------')
print(int(s1))      #todo 128
print(int(f1))      #todo 98  将float转化为int类型:取整数部分,舍去小数部分
#print(int(s2))     #todo 将str转化为int类型,报错,因为字符串为小数串
print(int(f2))      #todo  1
#print(int(s3))     #todo 将str转化为int类型,字符串必须为数字串,而且为整数串
print('-----------float()函数,将其他数据类型转化为浮点型-----------------')
s1 = '128.88'
f1 = '78'
f2 = True
s3 = 'hello'
i = 98
print(float(s1))  # 128.88
print(float(f1))  # 78.0
print(float(f2))  # 1.0
# print(float(s3))   #   字符串中的数据类型如果是非数字类型,则不允许转换
print(float(i))  # 98.0

12、关于*args和**kwargs

def foo2(name, age, *args):
    print(args)

foo2("123", '234', 'sdf')

def bar3(path, func, **kwargs):
    print(kwargs)

bar3('login', "login", method="get")

执行结果:

('sdf',)
{'method': 'get'}

13、位运算符

# todo 位运算符:将数据转化为二进制进行计算
print(4 & 8)  # 0   按位与&,同为1时结果为1

print(4 | 8)  # 12  按位或|,同为0时结果为0

# todo 左移位:高位溢出,低位补0  向左移1位相当于乘以2
# 向左移动1个位置
print(4 << 1)
# 向左移动2个位置
print(4 << 2)
# todo 右移位:高位补0,低位截断   向右移1位相当于除以2
# 向右移动1个位置
print(4 >> 1)
# 向右移动2个位置
print(4 >> 2)

14、计算结果

a = 10
b = 10
print(a == b)  # True
print(a is b)  #todo True

lst1 = [11, 22, 33]
lst2 = [11, 22, 33]
print(lst1 == lst2)  # True
print(lst1 is lst2)  #todo False

在这里插入图片描述

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

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

相关文章

【LVGL-特殊符号】

LVGL-特殊符号 ■ LVGL-特殊符号 ■ LVGL-特殊符号 /* 直接调用 */ lv_label_set_text(my_label, LV_SYMBOL_OK); /* 与字符一起用 */ lv_label_set_text(my_label, LV_SYMBOL_OK "Apply"); /* 多个符号一起用 */ lv_label_set_text(my_label, LV_SYMBOL_OK LV_SYMBO…

智过网:一级建造师必须两年考过吗?有效期多久?

在建筑行业&#xff0c;一级建造师的职业资格证书是众多从业者追求的目标。然而&#xff0c;获得这一证书并非易事&#xff0c;它要求考生不仅具备扎实的专业知识&#xff0c;还需要在限定的时间内完成所有科目的考试。那么&#xff0c;一级建造师是否必须在两年内考完所有科目…

LeetCode - 存在重复元素

219. 存在重复元素 II 这道题可以用两个方法解决。 哈希表 从左到右遍历数组&#xff0c;并将数组的下标存到hash中&#xff0c;在遍历数字的过程中&#xff0c;如果hash中不存在nums[i]&#xff0c;将nums[i]加入到hash当中&#xff0c;若存在&#xff0c;则判断下标之间的关…

九泰智库 | 医械周刊- Vol.16

⚖️ 法规动态 28类耗材联盟集采结果出炉&#xff0c;中选率仅27% 3月19日&#xff0c;河北省药械集采中心发布了《关于公示京津冀“3N”联盟28种集中带量采购医用耗材拟中选结果的通知》。共有202个产品被列为拟中选&#xff0c;产品中选率约为27%。本次集采未设置保底中标条…

buuctf_Reverse_wp_2

文章目录 [WUSTCTF2020]level3[base64变表]Youngter-drive[upx、多线程][FlareOn4]IgniteMe[算法分析]相册[APK、so文件、Native方法][WUSTCTF2020]Cr0ssfun[套娃、patience][GWCTF 2019]xxor[z3、算法分析][UTCTF2020]basic-re[FlareOn6]Overlong脚本输出动态调试 [FlareOn3]C…

科技强国:国产桌面操作系统正式上线,中国七位院士发表支持

操作系统是电子产品的核心&#xff0c;无论是手机还是电脑&#xff0c;都离不开它的支持。它是科技发展中至关重要的领域之一。备受瞩目的鸿蒙系统&#xff0c;作为国内颇具影响力的手机桌面操作系统&#xff0c;以其桌面组件自由整合和自定义风格的便捷性&#xff0c;引领了一…

运用YOLOv5实时监测并预警行人社交距离违规情况

YOLO&#xff08;You Only Look Once&#xff09;作为一种先进的实时物体检测算法&#xff0c;在全球范围内因其高效的实时性能和较高的检测精度受到广泛关注。近年来&#xff0c;随着新冠疫情对社交距离管控的重要性日益凸显&#xff0c;研究人员开始将YOLO算法应用于社交距离…

5G安全技术新突破!亚信安全5G安全迅龙引擎正式发布

5G专网应用飞速增长&#xff1a;2020年5G专网数量800个&#xff0c;2021年2300个&#xff0c;2022年5325个&#xff0c;2023年已经超过16000个&#xff0c;5G与垂直行业的融合快速加深&#xff0c;5G带来的变革正加速渗透至各行各业。 5G网络出现安全问题&#xff0c;将是异常严…

QT tableWidget横向众向设置

横向控件 要设置QTabWidget选项卡的字体方向&#xff0c;可以使用QTabWidget的setTabPosition()方法。通过传递Qt枚举值QTabWidget.east或QTabWidget.west作为参数&#xff0c;可以设置选项卡的字体方向为从左到右或从右到左。 myTabWidget QTabWidget() myTabWidget.setTabP…

【论文精读】DALLE3:Improving Image Generation with Better Captions 通过更好的文本标注改进图像生成

文章目录 一、文章概览二、数据重标注&#xff08;一&#xff09;现在训练数据的文本标注主要存在的问题&#xff08;二&#xff09;创建图像标注器&#xff08;三&#xff09;微调图像标注器 三、评估重新标注的数据集&#xff08;一&#xff09;混合合成标注和真实标注&#…

【vue】vue中的路由vue-router,vue-cli脚手架详细使用教程

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

PCD8000D开关调光/调色线性恒流LED控制芯片 无需变压器及电阻电容 只需极少元器件

概述 PCD8000D 是一款开关调节亮度/色温的LED恒流驱动IC。适用于AC 180V-240V 或AC 90V- 130V 输入电压&#xff0c;恒流精度小于 5% 。PCD8000D在3 段调节亮度应用中&#xff0c;可根据开启/关闭电源&#xff0c;依次改变输出电流的大小&#xff0c;从而改变LED 灯的亮度, …

RK3568驱动指南|第二篇 字符设备基础-第13章 杂项设备驱动实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

SpringMVC | SpringMVC中的 “JSON数据交互“ 和 “RESTful设计风格“

目录: 一、JSON 数据交互1.1 JSON概述1.2 JSON的“数据结构”对象结构数组结构 1.3 JSON的“数据转换”用 \<mvc:annotation-driven/>的方式 来“自动配置” MappingJackson2HttpMessageConverter转换器 (来完成JSON数据转换)用\<bean>标签方式的来“自行配置” JS…

Midjourney发布新特性风格参考

1. 引言 最近&#xff0c;Midjourney 推出了Style Reference V2.0 即功能更加强大的风格参考工具&#xff0c;该工具可以让大家参考其他图像的风格&#xff0c;生成与参考图像风格保持一致&#xff0c;与文本提示词语义内容保持一致的图像。它与图像提示类似&#xff0c;但是只…

关于Count,FPKM,TPM,RPKM等表达量的计算

原文链接&#xff1a;关于Count&#xff0c;FPKM&#xff0c;TPM&#xff0c;RPKM等表达量的计算及转换 | 干货 写在前面 今天使用count值转化TPM&#xff0c;或是使用FPKM转换成TPM。这样的教程&#xff0c;我们在前面已经出国一起相对比较详细的教程了&#xff0c;一文了解…

(一)基于IDEA的JAVA基础1

Java是一门面向对象的编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&#xff0c;极好地实现了面向对象理论&#xff0…

上位机图像处理和嵌入式模块部署(qmacvisual模板匹配)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 模板匹配是图像中经常使用到的功能。我看过很多现场配置部署的同学&#xff0c;虽然他们使用的是类似于vision master、visio pro这样的专业机器视…

STM32实验DMA数据搬运小助手

本次实验做的是将一个数组的内容利用DMA数据搬运小助手搬运到另外一个数组中去。 最后的实验结果&#xff1a; 可以看到第四行的数据就都不是0了&#xff0c;成功搬运了过来。 DMA实现搬运的步骤其实不是很复杂&#xff0c;复杂的是结构体参数&#xff1a; 整个步骤为&#xf…

Day17|二叉树part04:110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和、543: 二叉树的直径、124: 二叉树的最大路径和

之前的blog链接&#xff1a;https://blog.csdn.net/weixin_43303286/article/details/131982632?spm1001.2014.3001.5501 110.平衡二叉树 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a;一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。思路&#xff…