Day06-函數

函數

一、集合(set)

特點:不允許有重復元素,如果添加重復元素,則會自動過濾,可以進行交集、并集的運算。

本質:無序且無重復元素的數據結構

1 創建集合

s1 = set()  #空集合  不能是{},這是字典
s2 = {1,2,3,4}
print(s1)
print(set([30,40,50]))  #通過列表創建
print(set((11,22,33)))  #通過元組創建
print(set('hello')) ? ? #通過字符串創建 ?
print(set({'name':'大寶','age':20})) ? #通過字典創建,得到一個鍵的集合
?
#注意:重復元素在set中會被自動過濾

2 集合操作

#1 增加
#add添加不可變元素
s1.add(5)
# s1.add([6,7]) #不能添加列表,列表和字典都是不可哈希的
s1.add((6,7))  #可以添加元組元素,元組是可哈希的
print(s1)
?
#set.update(s) s必須是可迭代的對象:列表、元組、字符串、字典
#update會把列表、元組、字符串打碎添加到集合中
s1 = {1,2,3,4}
s1.update([5,6])
s1.update((7,8))
s1.update('hello')
s1.update({'1':10,'2':20})  #將字典的鍵添加到s1
print(s1)
?
#2 刪除
#set.remove(elem)
set3 = {1,2,3,4,5,6}
set3.remove(4)  #直接刪除指定元素
print(set3)
?
print(set3.pop()) #刪除任意元素,并返回該元素的值
print(set3)
set3.discard(10) #刪除的元素不存在,不會報錯
#set3.remove(10) #如果元素不存在,則報錯:KeyError
?
#3元素個數
print(len(set3))
?
#4 成員操作
print(2 in set3)  #True
?
#5 并、交、差集
s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}
print(s1 | s2)  #并
print(s1 & s2)  #交集
print(s1 - s2)  #差集

二、補充

2.1數據類型的轉換

函數名函數值
int(x)將x轉換為int類型
float(x)將x轉換成浮點型
str(x)將x轉換成字符串
bool(x)轉換成bool類型 的True False
dict(x)將序列x轉換成字典
list(x)將序列x轉換成列表
set(x)將序列x轉換成集合
tuple(x)將序列x轉換成元組

###2.2布爾值

在python中,能夠解釋為假的值有:None、0、0.0、False、所有的空容器(空列表、空元組、空字典、空集合、空字符串),其它是真

2.3 zip函數

zip() 函數用于將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的列表。

如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同,利用 * 號操作符,可以將元組解壓為列表。

語法:zip(iterable1,iterable2, ...)

參數說明:iterable -- 一個或多個可迭代對象(字符串、列表、元祖、字典)

a = [1,2,3,4]
b = [2,3,4]
res = zip(a,b)
print(list(res))  #[(1, 2), (2, 3), (3, 4)]
# 可以使用for-in 遍歷
for x,y in zip(a,b):print(x,y)

2.4 列表推導式

運用列表推導式,可以快速生成list,可以通過一個list推導出另一個list,而代碼卻十分簡潔。

#列表推導式語法:
[exp for iter_var in iterable] 
執行for-in循環時,通過iter_var遍歷iterable每一項,exp表達式中可以直接使用iter_var,每遍歷一項,產生一個新的列表元素。
#生成[0,1,4,9,16,25]
[x*x for x in range(6)]
?
#生成[0,4,16,36,64]
l2 = [x*x for x in range(9) if x % 2 ==0]
print(l2)
?
#可以使用雙重循環
suit = ['?','?','?','?']
face = ['A','2','3','4','5','6','7','8','9','10','J','Q','K']
poke = [(x,y) for x in suit for y in face]
?
#字典推導式
#列表生成式可以使用兩個變量,實現字典的鍵值交換
d = {"X":"A","Y":"B","Z":"C"}
list5 = {v:k for k,v in d.items()}
print(list5)
?
#集合推導式
print({x for x in range(10)})
?
#練習:
1.將一個列表中所有的字符串變成小寫l = ["Hello","World","IBM","Apple"]
如果是這樣的列表呢l =  ["Hello","World",10,"IBM","Apple"]

三、函數引入

前面我們寫過九九乘法表,但如果我要七七乘法表或五五乘法表的話,你會看到三者代碼極其類似,只是循環變量不同,那么如何做到代碼重用,而不是簡單拷貝黏貼修改呢,其實可是使用函數完成這一功能

def table(row,col,sep=3):for i in range(1, row + 1):for j in range(1, col + 1):if j <= i:print("%d*%d = %2d" % (i, j, i * j), end='%*s'%(sep,' '))print('')
#一次編碼,到處運行
table(8,8)
table(5,5,8)

函數的優點:

  • 代碼可復用

  • 代碼可維護性高

  • 容易排錯

  • 可讀性好

  • 利于團隊開發

1.函數定義

函數就是完成特定功能的代碼塊,本質上是對代碼的封裝。 語法格式

def 函數名([參數1],[參數2]....[參數n]):函數體
  • 函數名命名規則同變量名,要滿足標識符命名規則

  • 不能和系統函數重名,否則系統函數無法使用

  • 函數定義分兩部分函數頭和函數體

  • 函數體,就是實現功能的代碼段,以:開頭,必須縮進

  • 函數名的命名風格:一般建議用下劃線分隔的小寫單詞組成:say_hello

2 函數參數

2.1 實參和形參

  • 形參:就是函數定義時小括號里的變量

  • 實參:函數調用的時候,小括號里的表達式

  • 函數可以沒有形參和實參

2.2 參數分類

  • 位置參數,要求實參順序必須和形參順序完全一致,由形參順序決定實參順序

    def say_hello(name,age,home):print('大家好,我是{},我今年{}歲了,我來自{}'.format(name,age,home))
    ?
    say_hello('王二妮',18,'湖北武漢') #實參個數、順序必須和形參一致
  • 關鍵字參數,函數調用時,實參可以是鍵值對,鍵就是形參名字,這樣的調用,實參不必關心形參的順序。

    def say_hello(name,age,home):print('大家好,我是{},我今年{}歲了,我來自{}'.format(name,age,home))
    ?
    say_hello(name='王二傻',home='大連',age=20)  #三個關鍵字參數
    say_hello('大傻',home='美國',age=30)  #兩個關鍵字參數
    sya_hello('二傻',24,home='何方') ?  #一個關鍵字參數
  • 默認值,如果形參在定義的時候給定一個值,那么函數在調用時就可以不傳實參,可以簡化調用

    • 默認值參數必須放到最右邊

    • 如果傳了實參,那么實參優先,不會使用默認值

    • 默認值只計算一次

    • 默認值必須是不可變對象

    def my_power(x,n=2):return (x) ** n
    my_power(3)
    my_power(4,0.5)def test(a=[]):a.append('end')print(a)
    test([1,2,3])
    test()   #['end']
    test()   #['end','end']
    
  • 可變參數,傳入的參數個數是可變的,可以是1個、2個到任意個,還可以是0個。

    #使用*接收任意數量的位置參數#注意:*的不定長參數被當做元組處理
    def demo(a,b,*args):print(a,b,args)demo(12,33,90)
    demo(1,2,3,4,5)
    a=(1,2,3)
    demo(*a)#使用**接收任意數量的關鍵字參數
    #注意:**的不定長參數被當做字典處理
    def demo1(a,**args):print(a,args)
    demo1(1,name='kk',age=3)
    b = {'a':20,'b':12,'c':32}
    demo(**b)
    

2.3 參數組合

  • 形參順序須按照以下順序:位置參數、默認值參數、*args,**kwargs

3 函數調用

  • 函數調用必須在函數定義之后

  • 函數調用必須能夠正確傳遞實參

    def demo(a,b,c=0,*arg1,**arg2):print(a,b,c,arg1,arg2)
    demo(1,3,k=4)
    demo(1,2,3,4,5)
    demo(1,b=3,c=3,d=5)
    demo(*(1,2,3),**{'name':12})  #任何函數都可通過這種形式傳遞參數
    

4 返回值

可以通過return語句返回計算結果。語法: return 表達式

  • return的作用一個是終止函數的執行,所有執行了return后,其后的語句不會被執行

  • 如果沒有return語句,則默認返回的是None

  • return還可以返回給調用者數值

  • return可以返回一個值,如果要返回多個值,那么返回的是一個元組

    def demo2():return 1
    def demo3():return 1,2,3
    print(demo2())
    print(demo3())  #(1,2,3)
    

5 文檔字符串

函數文檔字符串documentation string (docstring)是在函數開頭,用來解釋其接口的字符串。簡而言之:幫助文檔

  • 包含函數的基礎信息

  • 包含函數的功能簡介

  • 包含每個形參的類型,使用等信息

文檔字符串書寫規則:

  • 必須在函數的首行

  • 使用三引號注解的多行字符串(''' ''') 或(""" """)

  • 函數文檔的第一行一般概述函數的主要功能,第二行空,第三行詳細描述。

    def test():"""函數名:test功能:測試參數:無返回值:無"""print("函數輸出成功")#使用__doc__屬性查看文檔字符串
    print(test.__doc__)
    

6.參數傳遞

python的參數傳遞是簡單的值傳遞,當然這里的值是指變量的引用(地址),不是變量的值。不存在值傳遞和引用傳遞的區分。簡而言之,python的參數傳遞可以稱之為對象引用傳遞,對象可以分為:

  • 不可變對象:int、float、None、complex、bool、tuple、str,range

    • 在函數內部不可能修改函數外部的變量

  • 可變對象: dict、list

    • 可以在函數內部修改

7 空函數

借助于pass語句實現,函數體不完成任何功能,只有一個pass語句

def test():pass

8 匿名函數

不再使用def 函數名()這種形式定義函數,而是使用lambda來創建匿名函數

特點:

  • lambda只是一個表達式,函數體比def簡單的多

  • lambda的函數體不再是代碼塊

  • lambda只有一行,增加運行效率

語法:

lambda [arg1,arg2....argn]:函數體
add = lambda a,b:a + b
print(add(3,5))

9.函數類型

函數也是一種類型,我們自定義的函數就是函數對象,函數名保存了函數對象的引用(地址)

def test():print('我是測試函數')print(test)  #函數名是變量,指向了函數對象
pf = test    #pf變量也指向了函數對象,所以也可以通過pf調用test函數
pf()

10.傳入函數

一個函數就可以接收另一個函數作為參數,這種函數就稱之為高階函數,也可以稱之為傳入函數。可以實現通用編程,排序等復雜功能

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

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

相關文章

在TextView中實時顯示數據

//下面實時更新顯示在textView中的數據handler new Handler();runnable new Runnable(){Overridepublic void run(){// TODO Auto-generated method pushupTextView.setText(Integer.toString(Number.pushup_number)); handler.postDelayed(this, 1000); }}; handle…

DuangDuangDuang!碼云項目的 Readme.md 特殊技能

為什么80%的碼農都做不了架構師&#xff1f;>>> 我們在 碼云 上創建新項目的時候&#xff0c;常常會看到默認使用 README 文件初始化該項目&#xff08;如圖1 所示&#xff09;&#xff0c;然后在新建項目的根目錄下就會生成一個 README.md 文件&#xff08;如圖2 …

java sunjce,無法初始化類javax.crypto.SunJCE_b

我已經開發了一個Javaservlet應用程序&#xff0c;并且在我的開發PC上&#xff0c;一切正常&#xff0c;包括按計劃使用SFTP通過端口8443等上的HTTPS并以適當的SSL證書通過PDF復制PDF。但是&#xff0c;當我嘗試在實時服務器上運行該應用程序時&#xff0c;會收到錯誤消息。jav…

GitHub添加SSH keys報錯Key is invalid. It must begin with 'ssh-ed25519', 'ssh-rsa', 'ssh-dss', 'ecdsa-sha

GitHub添加SSH keys報錯Key is invalid. It must begin with ‘ssh-ed25519’, ‘ssh-rsa’, ‘ssh-dss’, ecdsa-sha 在GitHub上Add SSH key的時候報錯&#xff1a;Key is invalid. It must begin with ‘ssh-ed25519’, ‘ssh-rsa’, ‘ssh-dss’, ecdsa-sha。。。&#xff…

System.Diagnostics.Process 執行.EXE

分類&#xff1a; C#WINFORM 2009-04-05 21:09 459人閱讀 評論(0) 收藏 舉報 我們經常會遇到在Winform或是WPF中點擊鏈接或按鈕打開某個指定的網址, 或者是需要打開電腦中某個指定的硬盤分區及文件夾, 甚至是"控制面板"相關的東西, 那么如何做呢? 答案是使用Sys…

php 擴展 返回字符串,基于PHP7的PHP擴展開發之四(字符串的處理)

目的&#xff1a;熟悉字符串在PHP擴展里面如何處理要實現的PHP代碼如下&#xff1a;1、當字符串不包含指定前綴字符串時&#xff0c;把前綴字符串和被檢測字符合并返回。2、當字符串包含指定前綴字符串時&#xff0c;原樣返回。 我們將使用PHP擴展的方式實現str_concat功能。fu…

對象之int介紹

#Auther Bob #--*--conding:utf-8 --*-- #創建兩個int的對象&#xff0c;age1和age2age1 10 age2 int(1)#查看對象的類print(type(age1))# <class int>print(type(age2))# <class int> #bit_length表示一個十進制數最少需要占用多個二進制位print(age1.bit_lengt…

Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.

谷歌瀏覽器報錯 版本 73.0.3683.103&#xff08;正式版本&#xff09; &#xff08;32 位&#xff09;報錯內容如下Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.jquery.js:2 Cross-Origin Read Blocking (CORB) blocked cros…

OpenStack 之vmware機器遷移到openstack集群

原理 openstack本身是支持使用vmware格式的鏡像的&#xff0c;但是是需要我們我們在/etc/nova/nova.conf的配置文件中指定該計算節點使用vmware的驅動 123456789101112# Driver to use for controlling virtualization. Options# include: libvirt.LibvirtDriver, xenapi.XenAP…

解決Django靜態文件配置pycharm高光問題

就困擾了我半天的Django靜態文件配置問題 更改了setting 文件后 文件參考問題總會高亮讓然覺得又錯誤怪怪的 所以索性直接眼不見心不煩 具體操作如下圖&#xff1a; 就這樣就可以啦 大功告成&#xff01; 也順便提一下靜態文件配置問題&#xff1a; Django靜態加載的設置…

Weblogic的管理服務器與受管服務器

weblogic管理服務器和受管服務器&#xff1a; 域包含一個稱為“管理服務器”的特殊 WebLogic Server 實例&#xff0c;它是您配置和管理域中所有資源的中心點&#xff0c;一個域有僅只有一個管理服務器實例。 在生產環境中&#xff0c;應將 Web 應用程序、EJB 和其他資源部…

python神經網絡可視化,python中的神經網絡感受野可視化

這是我想出的解決方案。謝謝mprat的幫助。在我發現spectralcolormap最適合這種任務&#xff0c;而且我還添加了您可以指定的邊框。在from matplotlib import pyplotimport numpy as npborder 2images_amount 300row_amount 10col_amount 30image_height 28image_width 28…

Qt 多媒體音頻模擬按鈕發音(音視頻啟動)

## 項目演示 平臺:windows或者ubuntu 要求:平臺需要支持音頻播放功能 文件格式:.wav 可以使用剪映生成,音頻部分,我這里是簡短的音樂 # Qt 多媒體簡介 Qt QSound是Qt框架中的一個類,用于播放音頻文件。它可以在Qt應用程序中實現簡單的音頻播放功能,包括播放、暫停和…

ASP.NET MVC5 ModelBinder

什么是ModelBinding ASP.NET MVC中&#xff0c;所有的請求最終都會到達某個Controller中的某個Action并由該Action負責具體的處理和響應。為了能夠正確處理請求&#xff0c;Action的參數&#xff08;如果有的話&#xff09;&#xff0c;必須在Action執行之前&#xff0c;根據相…

Day07-函數(2)

1.函數類型 函數也是一種類型&#xff0c;我們自定義的函數就是函數對象&#xff0c;函數名保存了函數對象的引用&#xff08;地址&#xff09; def test():print(我是測試函數) ? print(test) #函數名是變量&#xff0c;指向了函數對象 pf test #pf變量也指向了函數對…

php在html里面的位置,關于script在html中的擺放位置解析

以前一直覺得script在html中的任何位置都可以&#xff0c;今天做一個需求的時候才更正了自己的錯誤思想啊--script的位置也不是隨便放的。本文主要談論關于script在html中的擺放位置。小編覺得挺不錯的&#xff0c;現在就分享給大家&#xff0c;也給大家做個參考。希望能幫助到…

Protocol Buffer技術詳解(C++實例)

原文&#xff1a;http://www.cnblogs.com/stephen-liu74/archive/2013/01/04/2842533.html 這篇Blog仍然是以Google的官方文檔為主線&#xff0c;代碼實例則完全取自于我們正在開發的一個Demo項目&#xff0c;通過前一段時間的嘗試&#xff0c;感覺這種結合的方式比較有利于培訓…

yaml 解決問題

yaml 是什么&#xff1f; 在 github 一些開源項目里經常可以看到 .travis.yml 文件&#xff0c;后來接觸持續集成這個概念時發現很多文件都是 .yml 后綴的文件。我在 阮一峰-YAML 語言教程 里了解了它的作用以及基本寫法&#xff0c;他的那篇文章描述的略微有點啰嗦&#xff0…

2016 7 25 鏈表

1 #include<stdio.h>2 #include<stdlib.h>3 /* 4 usingnamespacestd;5 6 structNode7 {8 int data;//數據域9 struct Node*next;//指針域10 };11 12 /*13 Create14 *函數功能&#xff1a;創建鏈表.15 *輸入&#xff1a;各節點的data16 *返回值&#xff1a;指…

php數值操作,php數值計算num類簡單操作示例

php數值計算num類簡單操作示例,在線,計算器,小數,整數,程序設計php數值計算num類簡單操作示例易采站長站&#xff0c;站長之家為您整理了php數值計算num類簡單操作示例的相關內容。本文實例講述了php數值計算num類簡單操作。分享給大家供大家參考&#xff0c;具體如下&#xff…