Python集合和函數

深淺拷貝:
.copy()方法,淺拷貝值拷貝一層。
列表中的列表和字典會深拷貝,其他類型會淺拷貝。
列表中的列表和字典會隨著副本的修改而改變,其他類型不會隨著副本的改變為改變。
a=b不是復制,是兩個變量共享同一內存空間,一個改變另一個也改變。
a=[[1,2],3,4] b=copy.copy(a):淺拷貝,c=copy.deepcopy(a):深拷貝

集合:(重點)
作用:把不同的元素集合在一起,去除重復的內容,是無序的,集合里的元素是可哈希的。
set是可變集合,本身是非可哈希的,不能作為字典的鍵,
frozenset不可變集合。

集合創建:
s=set('alex li')

訪問集合:
由于集合本身是無序的,所以不能為集合創建索引或切片操作,只能循環遍歷或使用in、not in來訪問或判斷集合元素。
for i in s:
print(i)


集合操作:
s.add('uu'):添加一個元素
s.update('ops'):當成多個元素添加
s.remove():刪除元素
s.pop():隨機刪除
s.clear():清空集合
del s:刪除集合

集合操作符:
intersection():交集 {&}
union():并集 {|}
difference():差集 {-}
symmetric_difference()對稱差集,反向交集 {^}
a.issuperset(b):a>b 父集
a.issubset(b):a<b 子集

函數:
作用:減少重復代碼;方便修改,更易擴展;保持代碼一致性

函數創建:define定義
def 函數名稱():
函數代碼

函數命名規則:
--函數名必須以下劃線或字母開頭,可以包含任意字母、數字或下劃線的組合。不能使用任何的標點符號;
--函數名是區分大小寫的。
--函數名不能是保留字。

函數調用一定要加括號。

函數參數:
----必需的參數:

必需參數須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣。
def f(name,age):

print('I am %s,I am %d'%(name,age))

f('alex',18)
f('alvin',16)

----關鍵字參數:

關鍵字參數和函數調用關系緊密,函數調用使用關鍵字參數來確定傳入的參數值。使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為 Python 解釋器能夠用參數名匹配參數值。
def f(name,age):

print('I am %s,I am %d'%(name,age))

# f(16,'alvin') #報錯
f(age=16,name='alvin')

----缺省參數(默認參數):默認參數要跟在其他參數后面

調用函數時,缺省參數的值如果沒有傳入,則被認為是默認值。下例會打印默認的age,如果age沒有被傳入:
def print_info(name,age,sex='male'):

print('Name:%s'%name)
print('age:%s'%age)
print('Sex:%s'%sex)
return

print_info('alex',18)
print_info('鐵錘',40,'female')

----不定長參數

你可能需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數,和上述2種參數不同,聲明時不會命名。
加了星號(*)的變量名會存放所有未命名的變量參數。而加(**)的變量名會存放命名的變量參數

不定長參數的位置:
*args無命名參數要放在命名參數的左邊;**kargs參數放在右邊;默認參數,放最左邊

def print_info(*args,**kwargs):
print(args)

#for i in kwargs:
# print('%s:%s'%(i,kwargs[i]))
print(kwargs)
for i in kwargs:
print('%s:%s'%(i,kwargs[i]))

print_info('j','hj',[1,2,3],name='alex',age=12,job='it',hobby='grils')

函數返回值:

return None:默認
return作用:結束函數;返回某個對象
注意:函數沒有寫return,默認返回None;如果return多個對象,那么會把多個對象封裝成一個元祖返回。

=============================================================================
作用域(重要):L(local) E(enclosing) G(global) B(built_in)
局部作用域不能修改全局作用域。
count=10
def outer():
print(count)
count=5
會出錯

局部變量要修改全局變量要加關鍵字global
count=10
def outer():
global count
print(count)
count=5
print(count)

local作用域要想修改enclosing作用域必須加上nonlocal count
def outer():
count=10
def inner():
nonlocal count
count=20
print(count)
inner()
print(count)
outer()

LEGB
x = int(2.9) # int built-in

g_count = 0 # global
def outer():
o_count = 1 # enclosing
def inner():
i_count = 2 # local
print(o_count)
# print(i_count) 找不到
inner()
outer()

# print(o_count) #找不到
小結:
1、變量查找順序:LEGB,作用域局部>外層作用域>當前模塊中的作用域>Python內置作用域;
2、只有模塊、類及函數才能引入新的作用域;
3、對于一個變量,內部作用域先聲明就會覆蓋外部變量,不聲明直接使用,就會使用外部作用域的變量;
4、內部作用域要修改外部作用域變量時,全局變量要使用global關鍵字,嵌套作用域變量要使用nonlocal關鍵字,nonlocal是Python3新增的關鍵字,有了這個關鍵字,就能完美的實現閉包了

高階函數:
函數名可以進行賦值,函數名可以作為參數,還可以函數的返回值
def f(n):
return n*n
print(f(4))

def foo(a,b,func):
return func(a)+func(b)

print(foo(1,2,f))
結果:5
====================
def f():
print('ok')

def bar(a,b,func):
func()
return 1
print(bar(1,2,f))
結果:
ok
1
==================
def foo3():
def inner():
return 8
return inner

foo3()
print(foo3())#返回inner的內存地址
print(foo3()())#返回8

遞歸函數:
特點:調用自身函數;有一個結束條件
能用遞歸寫的程序循環都可以解決,遞歸效率在很多時候非常低,不推薦使用

階乘:
def f(n):
if n==1:
return 1
return n*f(n-1)
print(f(4))

斐波那契數列:

def fibo(n):

before=0
after=1
for i in range(n-1):
ret=before+after
before=after
after=ret

return ret

print(fibo(3))

#**************遞歸*********************
def fibo_new(n):#n可以為零,數列有[0]

if n <= 1:
return n
return(fibo_new(n-1) + fibo_new(n-2))

print(fibo_new(3))
print(fibo_new(30000))#maximum recursion depth exceeded in comparison

內置函數:

(1)filter:過濾器掉相同的字符
str=['a','b','c','d']
def fun1(s):
if s!='a':
return s
ret=filter(fun1,str)
print(ret) #<filter object at 0x000001A0AF55B940>
print(list(ret)) #['b','c','d']
結果為迭代器(過濾器)對象

(2)map:
str = ['d','a', 'b']
def fun2(s):
return s + "alvin"
ret = map(fun2, str)
print(ret) #<map object at 0x000001D4F52972B0> map object迭代器
print(list(ret)) #['dalvin', 'aalvin', 'balvin']

(3)reduce:疊加
from functools import reduce #Python3使用reduce要加這句話
def add1(x,y):
return x + y
print (reduce(add1, range(1, 10)))## 4950 (注:1+2+...+99)
print (reduce(add1, range(1, 101), 20))

#階乘
def mul(x,y):
return x*y
print(reduce(mul,range(1,10)))

(4)lambda:
def add(a,b):
return a + b
print add(2,3)

#匿名函數
add = lambda a,b : a + b
print(add(2,3))

?

轉載于:https://www.cnblogs.com/cxli99/p/8448535.html

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

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

相關文章

從 WinDbg 角度理解 .NET7 的AOT玩法

一&#xff1a;背景 1.講故事前幾天 B 站上有位朋友讓我從高級調試的角度來解讀下 .NET7 新出來的 AOT&#xff0c;畢竟這東西是新的&#xff0c;所以這一篇我就簡單摸索一下。二&#xff1a;AOT 的幾個問題 1. 如何在 .NET7 中開啟 AOT 功能在 .NET7 中開啟 AOT 非常方便&…

.NET Core C#系列之XiaoFeng.ToCast萬能類型轉換器

數據類型相互轉換如&#xff1a;字符串轉整型&#xff0c;字符串轉日期首先要引用 XiaoFeng命名空間下邊三個擴展方法 就是類型轉換的方法最常用的就是 ToCast<T>方法/// <summary> /// 類型相互轉換 /// </summary> /// <typeparam name"T">…

利用 Git OpenSSH 查看/生成 本機 ssh 公鑰

查看本機公鑰 本機公鑰文件一般用戶目錄下的.ssh文件夾&#xff0c;文件夾下有三個文件&#xff0c;分別是 id_rsa 私鑰密碼id_rsa.pub 公鑰內容known_hosts 允許的host地址 使用文本編輯器查看文件id_rsa.pub文件即可 或者使用cat命令查看 # 任意位置打開 Git bash cd ~/.…

高斯消元法

有點線代的知識&#xff1a; const double EPS 1e-8; typedef vector<double> vec; typedef vector<vec> mat; //Ax b vec gauss_jordan(const mat &A, const vec &b) {int n A.size();mat B(n,vec(n1)); //定義大小for(int i0;i < n;i)for(int j0…

判斷對象是否存在某個屬性

JavaScript判斷對象是否存在某個屬性或者方法&#xff0c;常用方法有兩種hasOwnProperty和in hasOwnProperty是Object原型對象上的一個方法&#xff0c;用來判斷對象自身屬性中是否具有指定的屬性。 這個方法可以用來檢測一個對象是否含有特定的自身屬性&#xff1b;和 in 運…

【PPT】適配器模式 和 橋接模式

【PPT】適配器模式 和 橋接模式目錄【PPT】適配器模式 和 橋接模式一、PPT 截圖1.0、封面和目錄1.1、設計模式概述1.2、結構型模式特點1.3、適配器模式1.4、橋接模式二、參考資料及 PPT 獲取方法獨立觀察員 2022 年 11 月 15 日為之前公司準備的分享PPT&#xff0c;后來沒用上。…

Flask 【第七篇】Flask中的wtforms使用

一、簡單介紹flask中的wtforms WTForms是一個支持多個web框架的form組件&#xff0c;主要用于對用戶請求數據進行驗證。 安裝&#xff1a; pip3 install wtforms 二、簡單使用wtforms組件 1、用戶登錄 具體代碼&#xff1a; from flask import Flask,render_template,request,…

CSS自定義滾動條樣式

css通過滾動條偽類來修改滾動條樣式&#xff0c;偽類名稱如下 ::-webkit-scrollbar 滾動條整體部分 ::-webkit-scrollbar-track 滾動條軌道&#xff08;里面裝有滑塊 thumb&#xff09; ::-webkit-scrollbar-thumb 滾動條滑塊 ::-webkit-scrollbar-button 滾動條軌道兩端按鈕 …

為了避免內存攻擊,美國國家安全局提倡Rust、C#、Go、Java、Ruby 和 Swift,但將 C 和 C++ 置于一邊...

本文翻譯自兩篇文章&#xff0c;第一篇是對美國國家安全局在“軟件內存安全”網絡安全信息表的解讀&#xff0c;第二篇是普及什么是內存安全&#xff0c;為什么它很重要&#xff1f;第一篇 為了避免內存攻擊&#xff0c;美國國家安全局提倡Rust、C#、Go、Java、Ruby 和 Swift&a…

自學python(一)

一、入門儀式 學習一門新語言必不可少的一件事&#xff1a; print("Hello world!")二、基礎知識 1、注釋&#xff1a; 單行注釋&#xff1a; 1 print("Hello world!") #輸出Hello world! 多行注釋&#xff1a; 這是多行注釋 這是多行注釋 這是多行注釋…

.NET周報【11月第2期 2022-11-15】

國內文章統一的開發平臺.NET 7正式發布https://www.cnblogs.com/shanyou/archive/2022/11/09/16871945.html在 2020 年規劃的.NET 5功能終于在.NET 7 完成了&#xff0c;為微軟和社區一起為多年來將不同的開發產品統一起來的努力加冕&#xff0c;未來只有一個.NET, 回顧.NET 20…

如何像使用AspNetCore中的Controllers 和 Actions一樣處理MQTT消息

在物聯網項目中&#xff0c; 處理MQTT的topic時費工費力&#xff0c; 代碼一團亂&#xff0c; 什么才是最好的姿勢&#xff1f;這里面我們極力介紹 MQTTnet.AspNetCore.Routing 項目&#xff0c;MQTTnet AspNetCore Routing 是https://github.com/Atlas-LiftTech/MQTTnet.AspN…

chrome 懸停大圖插件_Google Chrome瀏覽器的懸停卡:我不想要的我最喜歡的新東西

chrome 懸停大圖插件If you only have a handful of open tabs in Google Chrome, it’s easy to tell what they are. But as you start to collect more tabs (or make the window smaller), it gets harder. That’s where Hover Cards come in. 如果您在Google Chrome瀏覽器…

GitHub Codespaces 安裝 .NET 7

本文主要介紹如何在 GitHub Codespaces 這個云上 IDE 環境中安裝 .NET 7背景GitHub 的 Codespaces 可以讓我們隨時隨地編寫代碼&#xff0c;一些簡單的修改也非常方便快捷。特別是 .NET 7 發布后&#xff0c;一些可以直接升級的小項目只需要更改配置就可以了&#xff0c;我們可…

chrome怎么隱藏瀏覽器_如何使用Google Chrome的隱藏閱讀器模式

chrome怎么隱藏瀏覽器Chrome 75 has a hidden “Reader” mode that strips web pages down to the bare minimum to make them easier to, well, read. But it’s not enabled by default—here’s how to get it now. Chrome 75具有隱藏的“閱讀器”模式&#xff0c;可將網頁…

angularjs中使用swiper時不起作用,最后出現空白位

controller.js中定義swipers指令&#xff1a; var moduleCtrl angular.module(newscontroller,[infinite-scroll,ngTouch,news.service]) .directive(swipers,swipers); swipers.$inject [$timeout]; function swipers($timeout) {return {restrict: "EA",scope: {…

使用Jupyter記事本記錄和制作.NET可視化筆記

前言&#xff1a;對于記錄筆記的工具特別多&#xff0c;不過對于程序員來說&#xff0c;記錄筆記程序代碼運行結果演示可以同時存在&#xff0c;無疑會極大增加我們的筆記的可讀性和體驗感。以前在寫python的時候&#xff0c;使用jupyter的體驗很好&#xff0c;所以此處做一個基…

火狐上如何使用谷歌翻譯插件_將Google翻譯功能添加到Firefox

火狐上如何使用谷歌翻譯插件Are you looking for a quick no-fuss way to translate webpages? Then you will want to take a good look at the Translate extension for Firefox. 您是否正在尋找一種快速簡便的方法來翻譯網頁&#xff1f; 然后&#xff0c;您將需要很好地了…

Android 4.X 系統加載 so 失敗的原因分析

1 so 加載過程 so 加載的過程可以參考小米的系統工程師的文章loadLibrary動態庫加載過程分析 2 問題分析 2.1 問題 年前項目里新加了一個 so庫&#xff0c;但發現native 方法的找不到的 crash 好多&#xff0c;好些都是報了java.lang.unsatisfiedlinkerror native method not f…

桌面顯示激活windows_愚蠢的怪胎技巧:如何在桌面上顯示Windows版本

桌面顯示激活windowsHave you ever noticed during all the beta releases of Windows, there’s always a Windows version on the desktop in the lower right-hand corner? Here’s how that “feature” is enabled or disabled. 您是否曾經在Windows的所有beta版本中都注…