網站首頁 編程語言 正文
以如下代碼為例,我們在局部作用域內使用全局變量a,需要使用global
關鍵字進行聲明。否則代碼會不可用。
a = 100 def fun(): ? ? global a ? ? a += 100 ? ?? fun() print(a)
但是也有一種常見的情況,
可以修改的數據類型在函數內部做修改操作是不需要聲明global的:
list1 = [100, 200] def fun(): ? ? list1.append(300) fun() print(list1)
但是如果把添加元素的命令換成列表拼接的方式:
list1 += list1 + [300]
則代碼依然不可用,需要添加關鍵字global
聲明list1才可用。
進一步展開說:
list1 = [100, 200] print(list1, id(list1)) list1 = list1 + [300] print(list1, id(list1)) list1 += [400] print(list1, id(list1)) list1.append(500) print(list1, id(list1))
對于list1 = list1 + [300]
如圖,list1 = list1 + [300]
改變了list1的id,這意味著,得到的新的list1已經不是原來的list1變的,而是重新生成的,也可以理解成是重新賦值的list1,只是過程中利用了list1。該代碼在局部作用域沒有global不可用,因為在生成新的變量之前, list1 + [300] 中的list1是取不到的。
list1 += [400],list1.append(500)
都不改變id,改變的是原變量list1。
但是list1 += [400]
無global不可用,原因同上述情況一樣;list1.append(500)
則無global也可用,符合 可用修改的數據類型在函數內部的修改操作不需聲明global。
原文鏈接:https://skylarkprogramming.blog.csdn.net/article/details/122771338
相關推薦
- 2022-10-01 C語言五子棋小游戲實現代碼_C 語言
- 2022-11-05 Nginx配置文件中location配置的多種場景_nginx
- 2022-11-15 Django?使用VScode?創建工程的詳細步驟_python
- 2022-07-21 Centos7修改主機名hostname
- 2022-06-08 FreeRTOS實時操作系統Cortex-M內核使用注意事項_操作系統
- 2024-01-11 org.apache.commons.collections.MapUtils Map集合工具類
- 2022-07-18 Linux文件權限
- 2022-10-20 Android?PowerManagerService?打開省電模式_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支