日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

python基础(三元运算+深浅拷贝+函数参数)

發布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python基础(三元运算+深浅拷贝+函数参数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

三元運算

三元運算,又稱三目運算,主要作用是減少代碼量,是對簡單的條件語句的縮寫。

1 書寫格式:
2 result = 值1 if 條件 else 值2
3 即如果條件成立,則將值1賦給result變量,如果不成立,將值2賦給result變量
4 eg:name = "tina" if 1==1 else "fei"
name = "tina" if 1!=1 else "fei"
print(name)
執行結果如下:
fei?
小練習:
a = 1 if True else 0
print(a)
b=1 if False else 0
print(b)
c = "Fire" if True else "Water"
print(c)
d = "Fire" if False else "Water"
print(d)執行結果如下:
1
0
Fire
Water?

深淺拷貝

1、對于數字和字符串而言,賦值、淺拷貝和深拷貝無意義,因為其永遠指向同一個內存地址 只要是拷貝,不管是深拷貝還是淺拷貝以及賦值,其地址id都是一樣的。
import copy
#數字類型
n1 = 222
print(id(n1))
#賦值
n2 = n1
print(id(n2))
#字符串類型
n1 = "tina is a beauty"
n2 = n1
print(id(n1),id(n2))
###執行結果如下:
1638075088
1638075088
948823211080 948823211080
###由此可以看出字符串和數字類型的賦值,其內存指向的是同一塊內存###
#淺拷貝
n1 = 22
n2 = "asdf"
n3 = copy.copy(n1)
n4 = copy.copy(n2)
print(id(n1),id(n3))
print(id(n2),id(n4))
執行結果如下:
1638068688 1638068688
168374752680 168374752680
###由此可以看出字符串和數字類型的淺拷貝,其內存指向的是同一塊內存###
#深拷貝
n3 = copy.deepcopy(n1)
n4 = copy.deepcopy(n2)
print(id(n1),id(n3))
print(id(n2),id(n4))
執行結果如下:
1638068688 1638068688
778961474984 778961474984?
###由此可以看出字符串和數字類型的深拷貝,其內存指向的是同一塊內存###

畫圖說明:

2、對于列表、元組、字典而言,淺拷貝只拷貝最外層,深拷貝是全部拷貝,除了最底層的值(數字、字符串)不變。 值是拷貝的索引
#賦值
n1 = {"k1":"222","k2":"tina",'k3':['beauty',123]}
n2 = n1
print(id(n1),id(n2))
執行結果如下:
1003839407944 1003839407944# ###結合上面數字字符串的內容可以看出任何類型的賦值,其內存指向的是同一塊內存###

?

#淺拷貝(在內存中開創一塊空間,創建第一層數據,相當于只拷貝了索引)
import copy
n1 = {"k1":"222","k2":"tina",'k3':['beau',123]}
n2 = copy.copy(n1)
print(id(n1),id(n2))
執行結果如下:
715111778248 712964936072
#內存地址是不一樣的

?

#深拷貝(在內存中將與所有的數據重新創建一份,但由于python內部對數字和字符串的優化:永遠指向同一塊內存,所以最后一層不改變)
import copy
n1 = {"k1":"222","k2":"tina",'k3':['beau',123]}
n2 = copy.deepcopy(n1)
print(id(n1),id(n2))
執行代碼如下:
205036701640 205037113416

函數

?1、概念:

  • 面向過程編程:

? ? ? ? 根據業務邏輯從上到下實現功能,其往往用一長段代碼來實現指定功能,開發過程中最常見的操作就是粘貼復制,也就是將之前實現的代碼塊復制到現需功能處

  • 函數式編程:

? ? ? ? 將某功能代碼封裝到函數中,日后便無需重復編寫,僅調用函數即可,函數式編程最重要的是增強代碼的重用性和可讀性

  • 面向對象編程:

? ? ? ? 對函數進行分類和封裝,讓開發“更快更好更強...”

?2、函數的定義及使用:

1 def  函數名(參數):
2       ......
3       函數體
4       ......
5       返回值
 
函數定義的關鍵點:
  • def:表示函數的關鍵字
  • 函數名:函數的名稱,日后根據函數名調用函數
  • 函數體:函數中進行一系列的邏輯計算,如:發送郵件、計算出 [11,22,38,888]中的最大數等
  • 參數:為函數體提供數據
  • 返回值:當函數執行完畢后,可以給調用者返回數據

返回值不是必須的,如果沒有return語句,則Python默認返回值None。

函數名的命名規則(跟變量一樣):

函數名必須以下劃線或字母開頭,可以包含任意字母、數字或下劃線的組合。不能使用任何的標點符號;

函數名是區分大小寫的。

函數名不能是保留字。

?3、函數的返回值:

返回值的作用是:判斷函數是否執行成功,如果沒有寫return返回值時,默認返回none

函數是一個功能塊,該功能到底執行成功與否,需要通過返回值來告知調用者。
例如:
def 發送短信():發送短信的代碼。。。。。。if 發送成功:return Trueelse:return Falsewhile True:result = 發送短信()if result == False:記錄日志,短信發送失敗...# 每次執行發送短信函數,都會將返回值自動賦值給result# 之后,可以根據result來寫日志,或重發等操作   
###函數的返回值###
#返回一個值:
def onevalue(a,b):c = a + breturn c
print(onevalue(1,2))
#返回多個值:
def secondvalue(a,b,c):d = a + b + creturn(a,b,c,d)
print(secondvalue(11,22,33))
#返回多個值:
def somevalue(a,b):c = a + breturn (a,b,c)
x,y,z = somevalue(1,2)
print('x:',x,'y:',y,'z:',z)
執行結果如下:
3
(11, 22, 33, 66)
x: 1 y: 2 z: 3

?4、函數參數:

(1)實現形式:

  • 無參數時:
def CPU報警郵件()#發送郵件提醒
    連接郵箱服務器發送郵件關閉連接def 硬盤報警郵件()#發送郵件提醒
    連接郵箱服務器發送郵件關閉連接def 內存報警郵件()#發送郵件提醒
    連接郵箱服務器發送郵件關閉連接while True:if cpu利用率 > 90%:CPU報警郵件()if 硬盤使用空間 > 90%:硬盤報警郵件()if 內存占用 > 80%:內存報警郵件()無參數實現
  • 有參數時:
def 發送郵件(郵件內容)#發送郵件提醒
    連接郵箱服務器發送郵件關閉連接while True:if cpu利用率 > 90%:發送郵件("CPU報警了。")if 硬盤使用空間 > 90%:發送郵件("硬盤報警了。")if 內存占用 > 80%:發送郵件("內存報警了。")有參數實現

(2)參數的種類:

  • 普通參數
形參,實參,傳參
def email(p,text,subject):import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrmsg = MIMEText(text,'plain','utf-8')msg['From'] = formataddr(["菲菲",'wptawy@126.com'])msg['To'] = formataddr(['hhhh','424662508@qq.com'])msg['Subject'] = subjectserver = smtplib.SMTP('smtp.126.com',25)server.login('wptawy@126.com','WW.3945.59')server.sendmail('wptawy@126.com',[p,],msg.as_string())server.quit()
email("1156997553@qq.com","youjianneirong","zhuti")
##其中,p,text,subject就是形參,"1156997553@qq.com","youjianneirong","zhuti"是實參,即實參是執行函數時實際傳入的值。
######### 定義函數 ######### # name 即為函數aa的形式參數,簡稱:形參
def aa(name):print name######### 執行函數 ######### 
#  'tina' 就是函數func的實際參數,簡稱:實參
func('tina')
  • 默認參數
def fun(name, age = 18):print("%s:%d" %(name,age))
# 指定參數
fun('tina', 19)
# 使用默認參數
fun('tony')
執行結果如下:
tina:19
tony:18注:默認參數需要放在參數列表最后
  • 動態參數

(a)一個星號的動態參數(*args):

一個*號傳遞的參數默認定義為元祖類型
def f1(*a):print(a,type(a))
f1(123,456,[222,33])
執行結果如下:
(123, 456, [222, 33]) <class 'tuple'>
def func(*args):print(args)# 執行方式一
func(11,33,4,4454,5)
執行結果如下:
(11, 33, 4, 4454, 5) <class 'tuple'># 執行方式二
li = [11,2,2,3,3,4,54]
func(*li)
執行結果如下:
(11, 2, 2, 3, 3, 4, 54) <class 'tuple'>

(b)兩個星號的動態參數(**kwargs):

兩個*號傳遞的參數默認定義為字典類型
def f1(**a):print(a,type(a))
f1(k1=123,k2=456)
執行結果如下:
{'k1': 123, 'k2': 456} <class 'dict'>
def func(**kwargs):print(kwargs,type(kwargs))# 執行方式一
func(name='tina',age=18)
執行結果如下:
{'name': 'tina', 'age': 18} <class 'dict'># 執行方式二
li = {'name':'tina', 'age':18, 'gender':'female'}
func(**li)
執行結果如下:
{'gender': 'female', 'name': 'tina', 'age': 18} <class 'dict'>

(c)*args和**kwargs的結合:

def f2(p,*a,**aa):print(p,type(p))print(a,type(a))print(aa,type(aa))
f2(11,22,33,k1=123,k2=456)
執行結果如下:
11 <class 'int'>
(22, 33) <class 'tuple'>
{'k2': 456, 'k1': 123} <class 'dict'>
def show (*arg,**kwargs):print (arg,type(arg))print (kwargs,type(kwargs))
show([11,22,33],[44],['a','b'],k1='v1',k2='v2')
執行結果:([11, 22, 33], [44], ['a', 'b']) <class 'tuple'>{'k2': 'v2', 'k1': 'v1'} <class 'dict'>##結論:同時傳遞兩個帶*號的參數,在形參定義里,第一個形參只能是帶一個*號,第二個形參只能是帶兩個*號,同時在參數傳遞的時候,第一個參數只能是普通的定義,第二個參數是字典的定義def show (*arg,**kwargs):print (arg,type(arg))print (kwargs,type(kwargs))

li = [[11,22,33],[44],['a','b']]
di = {'k1':'v1','k2':'v2'}
show (li,di)show(*li,**di)執行結果:([[11, 22, 33], [44], ['a', 'b']], {'k1': 'v1', 'k2': 'v2'}) <class 'tuple'>{} <class 'dict'>([11, 22, 33], [44], ['a', 'b']) <class 'tuple'>{'k1': 'v1', 'k2': 'v2'} <class 'dict'>##結論:通過第一種方式來傳參數,python默認認為傳到了第一個*號的形參那里,第二個*號不會接收參數。通過第二種方式來傳遞參數,才能將匹配的參數傳給對應的形參。

?(d)動態參數的應用

動態參數的應用:
s = '{0} is {1}'
li = ['tina','charming']
re = s.format(*li)
print(re)s = '{a} is {b}'
di = {'a':'tina','b':'charming'}
re = s.format(**di)
print(re)執行結果為:
tina is charming
tina is charming

??5、全局變量和局部變量:

全局變量也稱為外部變量,它是在函數外部定義的變量。 它不屬于哪一個函數,它屬于一個源程序文件。其作用域是整個源程序。在函數中使用全局變量,一般應作全局變量說明。 只有在函數內經過說明的全局變量才能使用。全局變量的說明符為global。 但在一個函數之前定義的全局變量,在該函數內使用可不再加以說明。

局部變量也稱為內部變量。局部變量是在函數內作定義說明的。其作用域僅限于函數內, 離開該函數后再使用這種變量是非法的。

PERSON = "tina"
def fun1():a = 123global PERSONPERSON = "fei"print(a)
def fun2():a = 456print(PERSON)print(a)
fun1()
fun2()執行結果如下:
123
fei
456

*注:全局變量要大寫,局部變量要小寫

?

轉載于:https://www.cnblogs.com/tina-python/p/5467730.html

總結

以上是生活随笔為你收集整理的python基础(三元运算+深浅拷贝+函数参数)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。