python中的常量可以修改嗎_深入理解Python變量與常量

變量是計算機內存中的一塊區域,變量可以存儲規定范圍內的值,而且值可以改變。基于變量的數據類型,解釋器會分配指定內存,并決定什么數據可以被存儲在內存中。常量是一塊只讀的內存區域,常量一旦被初始化就不能被改變。

變量命名字母、數字、下劃線組成,不能以數字開頭,前文有說不在贅述。

變量賦值

Python中的變量不需要聲明,變量的賦值操作即是變量的聲明和定義的過程。每個變量在內存中創建都包括變量的標識、名稱、和數據這些信息。

Python中一次新的賦值,將創建一個新的變量。即使變量的名稱相同,變量的標識并不同。

x = 1 #變量賦值定義一個變量x

print(id(x)) #打印變量x的標識

print(x+5) #使用變量

print("=========華麗的分割線=========")

x = 2 #量賦值定義一個變量x

print(id(x)) #此時的變量x已經是一個新的變量

print(x+5) #名稱相同,但是使用的是新的變量x

繼續賦值

x = 'hello python'

print(id(x))

print(x)

此時x又將成為一個新的變量,而且變量類型也由于所賦值的數據類型改變而改變。

此處,id()為Python的內置函數。參見:https://docs.python.org/3/library/functions.html#id

如果變量沒有賦值,Python將認為該變量不存在。

Python支持多個變量同時賦值。

例如:

a = (1,2,3) #定義一個序列

x,y,z = a #把序列的值分別賦x、y、z

print("a : %d, b: %d, z:%d"%(x,y,z)) #打印結果

a, b, c = 1, 2, "john"

變量作用域

局部變量是只能在函數或者代碼塊內使用的變量,函數或者代碼塊一旦結束,局部變量的生命周期也將結束。局部變量的作用范圍只有在局部變量被創建的函數內有效。

例如:在文件1中的fun()中定義了一個局部變量,則該局部變量只能被fun()訪問,文件1中定義的fun2()不能訪問,也不能被文件2訪問。

#fileName:file1

def fun():

local_var = 100 #定義一個局部變量

print(local_var)

def fun2():

zero = local_var - 100 #fun2中使用局部變量(不可以)

print("get zero : %d"%zero)

fun()

#fun2()

print("local_var -1 = %d"%(local_var - 1)) #文件1中使用局部變量(不可以)

################################

#Traceback (most recent call last):

# File "E:/python/file1.py", line 10, in

# print("local_var -1 = %d"%(local_var - 1))

#NameError: name 'local_var' is not defined

################################

#Traceback (most recent call last):

# File "E:/python/file1.py", line 9, in

# fun2()

# File "E:/lichenli/python/file1.py", line 6, in fun2

# zero = local_var - 100

#NameError: name 'local_var' is not defined

################################

#fileName:file2

import file1

file1.fun()

print(local_var)

########################

#運行結果

#100

#Traceback (most recent call last):

# File "E:\python\file2.py", line 4, in

# print(local_var)

#NameError: name 'local_var' is not defined

########################

fun()中定義的局部變量就只有fun能夠訪問。

全局變量是能夠被不同函數、類或文件共享的變量,在函數之外定義的變量都叫做全局變量。全局變量可以被文件內任何函數和外部文件訪問。

#fileName:file1

g_num1 = 1 #定義全局變量

g_num2 = 2 #定義全局變量

def add_num():

global g_num1 #引用全局變量

g_num1 = 3 #修改全局變量的值

result = g_num1 + 1

print("result : %d"%result)

def sub_num():

global g_num2

g_num2 = 5

result = g_num2 - 3

print("result : %d"%result)

add_num()

sub_num()

print("g_num1:%d "%g_num1)

print("g_num2:%d "%g_num2)

#result : 4 result為局部變量

#result : 2

#g_num1:3 全局變量g_num1在執行add_num()函數時被改變

#g_num2:5 全局變量g_num2在執行sub_num()函數時被改變

global保留字用于引用全局變量,如果不適用global關鍵字,在函數中再為g_num1賦值時將被解釋為定義了一個局部變量g_num1。

#添加到sub_num()函數定義之后,add_num()函數調用之前

def other():

result = g_num1 + 2 #直接適用全局變量不改變全局變量的值OK

print("result : %d"%result)

other()

#######################

#result : 3

#result : 4

#result : 2

#g_num1:3

#g_num2:5

#######################

#添加到sub_num()函數定義之后,add_num()函數調用之前

def other():

g_num1 = 10

result = g_num1 + 2

print("result : %d"%result)

other()

####################

#result : 12

#result : 4

#result : 2

#g_num1:3

#g_num2:5

####################

在文件2中訪問全局變量。

#fileName:file2

import file1

file1.add_num() #g_num1被改變

test = file1.g_num1 + 1

print("test :%d"%test)

應該盡量避免使用全局變量。不同的模塊可以自由的訪問全局變量,可能會導致全局變量的不可預知性。

全局變量降低了函數或者模塊之間的通用性,不同的函數或模塊都要依賴于全局變量。同樣,全局變量降低了代碼的可讀性,閱讀者可能不知道調用的某個變量是全局變量。

常量

常量是一旦初始化之后就不能修改的固定值。例如:數字"5",字符串"abc"都是常量。

Python中并沒有提供定義常量的保留字。Python是一門功能強大的語言,可以自己定義一個常量類來實現常量的功能。

#fileName:const.py

class _const:

class ConstError(TypeError):pass

def __setattr__(self,name,value):

#if self.__dict__.has_key(name): 3.x之后has_key被廢棄

if name in self.__dict__:

raise self.ConstError("Can't rebind const(%s)"%name)

self.__dict__[name] = value

import sys

sys.modules[__name__] = _const()

#fileName:const_2.py

import const

const.name='zhangsan'

const.name='lisi'

##################################

#Traceback (most recent call last):

# File "E:/python/const_2.py", line 4, in

# const.name='lisi'

# File "E:/python\const.py", line 7, in __setattr__

# raise self.ConstError("Can't rebind const(%s)"%name)

#const._const.ConstError: Can't rebind const(name)

##################################

name這個變量已經被賦值"zhangsan"不能繼續被賦值,所以拋出異常。raise保留字用于拋出異常。

以上這篇深入理解Python變量與常量就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533546.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533546.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533546.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java方法體邏輯不會寫怎么辦,想自己寫框架?不會寫Java注解可不行

用注解一時爽,一直用一直爽Java后端開發進入spring全家桶時代后,開發一個微服務提供簡單的增刪改查接口跟玩泥巴似的非常簡單,一頓操作猛如虎,回頭一看代碼加了一堆注解:Controller Autowired Value,面向注…

聯想拯救者y7000加內存條_短測聯想拯救者Y7000,到底值不值得買?

7000塊左右的筆記本電腦有什么好選擇,我相信這是很多人一直糾結的問題,雖然我用過的筆記本很多,但是這個價位的用的少之又少,但隨著十代酷睿標壓處理器的大量鋪貨,聯想拯救者Y7000進入了我的視線。那到底值不值得買呢&…

php適用于什么服務器,php – 找不到laravel類(適用于localhost但不適用于DO服務器)...

這是一個重復的問題 – 例如:Laravel 4 migrations – class not found但是,我已經嘗試了所有解決方案(來自我能找到的每個論壇)并且無法解決這個問題.腳本我在我的本地機器上創建了一個Laravel 4項目 – 添加了一些類,控制器,視圖等 – 項目運行良好.然后我將這個新…

python掃雷游戲課程設計小組任務計劃與分配表_python實現掃雷游戲

本文為大家分享了python實現掃雷游戲的具體代碼,供大家參考,具體內容如下本文實例借鑒mvc模式,核心數據為model,維護1個矩陣,0表無雷,1表雷,-1表已經檢測過。本例使用python的tkinter做gui,由于…

時間同步服務器java,Windows 配置時間同步服務器以及配置時間同步間隔

如何修改windows下的時間同步間隔操作步驟如下:打開注冊表:在“開始”菜單→“運行”項下(或按WinR)輸入“Regedit”進入注冊表編輯器。2.修改默認時間服務器IP:展開HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Services->W…

房價python爬取_python爬取并解析 重慶2015-2019房價走勢

1 #! /usr/bin/env python2 #-*- coding:utf-8 -*-34 5 Created on 2019年11月24日67 author: Admin8 910 importrequests11 from lxml importetree12 importtime13 importcsv1415 16 方法名稱:spider17 功能: 爬取目標網站,并以源碼文本18 參…

PHP遞歸刪除目錄面試題,PHP 遞歸刪除目錄中文件

/*** 遞歸刪除目錄中文件* param $pathname* return bool*/public static function delDir($pathname)//要刪除的目錄{if(file_exists($pathname)) {if(is_file($pathname)) {unlink($pathname);} else {$dir opendir($pathname);while($filename readdir($dir)) {if($filena…

python中 12_python編程中常用的12種基礎知識總結

1、正則表達式替換目標: 將字符串line中的 overview.gif 替換成其他字符串>>> line >>> more.compile(r(?<SRC)"([\w\.])",re.I)>>> mo.sub(r"\1****",line)>>> mo.sub(rreplace_str_\1,line)< /span>>&…

php smarty分頁原理,SMARTY分頁詳解

<?phprequire_once (include/common.inc.php);//這里是個接口common.inc.php里面包函了一些常用到的函數類庫以及SMARTYinclude_once(header.php);//調用頭部信息,SESSION的信息全都保存在這里,這樣做的好處是幾乎所有的頁面都不需要在開頭輸入session_start();$smarty new…

python十個一行_python 如何將一系列數字十個一行輸出

展開全部答案如下&#xff1a;代碼詳解1、使用循環輸出列表&#xff0c;利用 計數器控制輸出數量&#xff0c;當輸出到第十個&#xff0c;62616964757a686964616fe4b893e5b19e31333365663532計數器歸零&#xff0c;重新開始計數2、print輸出增加end參數可以控制輸出后以什么結尾…

sql oracle 遞歸查詢語句,Oracle使用SQL語句進行遞歸查詢

idpid問題描述&#xff1a;102031415262738495取出id為1及其下屬的所有的數據,結果為下idpid1031417384SQL> CREATE TABLE TBL_TEST2 (3 ID NUMBER,4 NAME VARCHAR2(100 BYTE),5 PID NUMBER DEFAULT 06 );Table createdS…

python中與0xf2相等的是_python中__str__與__repr__

(1)背景python中&#xff0c;對于類(自定義類)的實例對象的默認顯示既沒有太大用處&#xff0c;也不美觀。比如&#xff1a;1 classadder:2 def __init__(self,value0):3 self.datavalue #初始化數據4 def __add__(self,other):5 self.dataother6>>> xadder()7>>…

oracle清理asm歸檔日志,【Oracle】 rman 刪除歸檔日志的命令

因為數據倉庫上asm的磁盤空間不足&#xff0c;需要刪除早期的歸檔日志&#xff0c;查看資料有以下兩種方式&#xff1a;delete archivelog until time sysdate-N;delete archivelog all completed before sysdate-N;這兩個命令的差別在哪里呢&#xff1f;使用list 命令來查看一…

求逆矩陣計算器_991CN的矩陣運算

昨天的推文中說了一道二端口的題目&#xff0c;虛線中的大二端口由兩個小二端口級聯而成&#xff0c;在計算過程中&#xff0c;我們需要使用到矩陣的運算&#xff0c;昨天講題的時候說會說一下用計算器進行矩陣運算&#xff0c;今天我們就來說一下。其實在算電路的時候&#xf…

去快捷方式小箭頭_電腦桌面如何快速去掉快捷方式小箭頭

我們使用電腦時會發現在電腦桌面圖標上經常有一個小箭頭&#xff0c;這是什么原因呢&#xff1f;原來&#xff0c;這個小箭頭只存在于快捷方式的軟件圖標上&#xff0c;就是說通過快捷方式創建的圖標就有這個小箭頭。那么如何去掉這些小箭頭呢&#xff01;不知道也沒關系&#…

Oracle里silent,靜默方式(silent)安裝Oracle軟件

有的時候不方便登陸Linux/Unix的圖形界面安裝數據庫&#xff0c;且GUI方式安裝讓我們無法知道具體是做了什么操作&#xff0c;我們完全可以采用命令模式安裝和刪除Oracle軟件(代替OUI)、建立和刪除數據庫庫(代替dbca)。平臺&#xff1a;RHEL4.5&#xff0c;Oracle10.2.0.11、上…

oracle 移動日志文件,Oracle數據庫移動數據文件、日志文件和控制文件

1、關閉數據庫SQL> shutdown immediate;2、移動數據文件和日志文件到新位置SQL> host mv /u01/olddata.dbf /u02/newdata.dbf;SQL> host mv /u01/oldredo.log /u02/newredo.log;3、以加載模式啟動數據庫SQL> startup mount;4、在數據庫中更改數據文件和日志文件路徑…

python3導入_Python3導入相對還是絕對的正確方法?

我正在編寫一個python模塊。在Python2中一切正常&#xff0c;但在Python3中&#xff0c;導入失敗。這是我的代碼結構。neuralnet/__init__.pytrain.py # A wrapper to train (does not define new things)neuralnet.py # Defines the workhorse class neuralnetlayers/__init__…

oracle pdb是什么意思,淺談Oracle數據庫12c PDB技術

PDB大致功能描述&#xff1a;創建&#xff1a;用create pluggable database的命令&#xff0c;用file_name_convert的方式拷貝seed pdb的文件到對應的新pdb的路徑下。拷貝的是最基本system和sysaux表空間&#xff0c;將新建的pdb從mount的狀態打開到read write的狀態。建立pdb用…

oracle查詢sql時間ain,Oracle SQL 時間查詢

一、在使用Oracle的to_date函數來做日期轉換時&#xff0c;很多Java程序員也許會和我一樣&#xff0c;直覺的采用ldquo;yyyy-MM-dd HH:mm:ssrdquo;的to_date()與24小時制表示法及mm分鐘的顯示&#xff1a;一、在使用Oracle的to_date函數來做日期轉換時&#xff0c;很多Java程序…