Python之函數

来源:http://www.cnblogs.com/caicairui/archive/2017/09/13/7518154.html
-Advertisement-
Play Games

簡介: 定義函數: def xx(): print("xxx") 執行函數 xx() 函數返回值: 上述中,return為返回值,返回給r。return想返回什麼就返回什麼,如果沒有寫返回值,就返回None,就是空。 函數的普通參數: 如果實參不是按照順序給形參值的情況:(在實參內指定就行了) 函數 ...


簡介:

定義函數:

def xx():  

  print("xxx")

執行函數

xx()

函數返回值:

def emile():
    print("發郵件")
    return '123'
r = emile()
print(r)

結果:
發郵件
123

上述中,return為返回值,返回給r。return想返回什麼就返回什麼,如果沒有寫返回值,就返回None,就是空。

def emile():
    if True:
        return True
    else:
        return False
ret = emile()

if ret:
    print('好的')
else:
    print('滾')

結果:
好的

函數的普通參數:

def i1(p,q,r):    #p,q,r為形參
    print(p,q,r)    #列印出p,q,r的值    
    return True    #返回True
ret = i1('11',[22,11],'33')      #i1裡面的為實參,是按照順序給形參值
print(ret)

結果:
11 [22, 11] 33
True

如果實參不是按照順序給形參值的情況:(在實參內指定就行了)

def i1(p,q,r):
    print(p,q,r)
    return True
ret = i1(q = '11',p = [22,11],r = '33')
print(ret)

結果:
[22, 11] 11 33
True

函數的預設值:

temp = ""
def drive(name="小七"):  #這裡的name = "小七",就是函數預設值,當函數沒有給name實參時,就會用預設值。註意預設值,都會放在形參的最後的位置。
    temp = name + "開車"
    return temp

ret = drive("小二")
print(ret)

ret = drive("小三")
print(ret)

ret = drive()
print(ret)

結果:
小二開車
小三開車
小七開車

函數的動態參數: 

動態參數一(*a):

def i1(*args):     #保存為元組
    print(args)
    
i1(12,33,44,55)    #實參能夠全部傳給a

結果:
(12, 33, 44, 55)

動態參數二(**a):

def i1(**kwargs):    #保存為字典形式
    print(kwargs)

i1(k1 = 123, k2 = 234)      #實參全部傳給a

結果:
{'k1': 123, 'k2': 234}

動態參數形式結合(萬能參數):

def i1(p,*args,**kwargs):
    print(p)
    print(args)
    print(kwargs)

i1(11,22,33,43,k1 = 123, k2 = 234)

結果:
11
(22, 33, 43)
{'k1': 123, 'k2': 234}
def i1(**kwargs):
    print(kwargs,type(kwargs))
dic={"k1":123,"k2":345}
i1(**dic)

結果:
{'k1': 123, 'k2': 345} <class 'dict'>

全局變數與局部變數:

全局變數要大寫,局部變數要小寫。

深淺拷貝:

對於int和str來說,深淺拷貝都是一樣的,都能拷貝完整。

對於其他,淺拷貝只拷貝最外面一層,深拷貝除最內層都要拷貝。

import copy
i1 = "123avc"
i2 = copy.copy(i1)      #淺拷貝
i3 = copy.deepcopy(i1)    #深拷貝 print(i2) print(i3) 結果: 123avc 123avc

lambda表達式:

def func1():
    return 123
i = func1()
print(i)

f2 = lambda :123
i1 = f2()
print(i1)

結果:
123
123
def func1(a1,a2):
    return a1+a2
i = func1(11,22)
print(i)

f2 = lambda a1,a2: a1+a2
i1 = f2(11,22)
print(i1)

結果
33
33

Python的內置函數: 

abs()    取絕對值

def func1(a1,a2):

    i2 = abs(a1+a2)
    print(i2)

i = func1(-11,-22)

結果:
33

type()    查看對象類型

all()    迴圈參數,如果每個元素都為真,那麼就返回真,只要有一個為假都返回False(假:0,None,空字元串,空列表,空元組,空字典)

any()    迴圈參數,只要有一個元素是真就返回真(True)

ascii(對象)    對象的類中找_repr_功能,獲取其返回值

class Foo:
    def __repr__(self):
        return "hello"
    
obj = Foo()
r = ascii(obj)
print(r)

結果:
hello

bin()    二進位

oct()    八進位

int()    十進位

hex()    十六進位

#!/bin/bash/env python
# -*- coding:utf-8 -*-
#functio:二進位改為十進位

i = int("0b11",base=2)    #其他進位之間的轉換也一樣,註意base的作用
print(i)

結果:
3

boll()    判斷真假,把一個對象轉換為布爾值

bytes()    位元組(和bytearray類似於str和list的關係)  bytes("xxx",encoding="utf-8")

bytearray()    位元組列表

chr()    輸入一個數字找到相對應的字元(參照ascii表,數字找到對應的字元)

ord()    接受一個字母找到對應的數字(只使用於ascii碼)

實現隨機驗證碼:(應用到chr()--這個是對照ascii表和str())

import random

tmp = ""
for i in range(6):
    num = random.randrange(0,4)
    if num == 1 or num == 3:
        rad2 = random.randrange(0,10)
        tmp = tmp + str(rad2)
    else:
        rad1 = random.randrange(65,91)
        c1 = chr(rad1)
        tmp = tmp + c1

print(tmp)

flush()    使對象立即保存在硬碟中

callable()    檢查輸入對象是否可以執行(如果命令加()表示該命令可以被執行)

complie()    編譯對象,使之能成為python可以執行的代碼

divmod()    求除數的商和餘數

i1 = 10/3
print(i1)
i2 = divmod(10,3)
print(i2)

結果:
3.3333333333333335
(3, 1)

enumerate()   自動生成一列,預設從0開始自增1,也可以自己指定字元串轉換成數字int(字元串)

i1 = ["you","i","she","he"]
for key,item in enumerate(i1):
    print(key,item)

結果:
0 you
1 i
2 she
3 he

eval()    (做表格彙總)執行一個字元串形式的表達式

i1 = eval("1 + 3")
print(i1)

結果:
4

filter(函數,可迭代對象)    迴圈可迭代的對象,獲取每一個參數(函數),篩選功能

ret = filter(lambda x:x > 22,[11,22,33,44])
for i in ret:
    print(i)

結果:
33
44

map(函數,可迭代對象)    

def func1(x):
    return x + 100
ret = map(func1,[1,2,3,4,5])
print(ret)
for i in ret:
    print(i)

結果:
<map object at 0x000000000260B2B0>
101
102
103
104
105

globals()    獲取全部的全局變數

locals()    獲取全部的局部變數

hash()    獲取哈希值(為了節省記憶體,而且快速找到,優化key

isinstance()    判斷某個對象是否由某個類創建的

issubclass()    判斷是否是子類

iter()    next()

obj = iter([11,22,33,44])
print(obj)
r1 = next(obj)
print(r1)
r2 = next(obj)
print(r2)

結果:
<list_iterator object at 0x000000000291B1D0>
11
22

max()    取最大值

min()    取最小值

pow()    求冪

round()    四捨五入

sum()    求和

sorted()    排序:(想要排序必須是同一種類型,比如都是數字)字元串比較,先比第一個字元,以後一個一個比,然後排序

i1 = [11,22,11,33,22,44,55,66,]
new_list = sorted(i1)
print(new_list)

結果:
[11, 11, 22, 22, 33, 44, 55, 66]

打開文件的模式有:

預設是只讀模式

r:只讀模式(預設)

w:只寫模式(不可讀,不存在創建鍵;存在則清空內容)

x:只寫模式(不可讀,不存在創建鍵,存在則報錯)

a:追加模式(不可讀,不存在創建鍵,存在則只追加內容)

 

+表示可以同時讀寫某個文件:

r+:讀寫(可讀,可寫)

w+:寫讀(可讀,可寫) 先清空,再寫之後就可以讀了

x+:寫讀(可讀,可寫和上面差不多)

a+:寫讀(可讀,可寫)  打開同時,指針已經到最後了,寫時追加,放在最後

 

b表示以位元組的形式操作:

rb  或r+b

wb  或w+b

xb  或x+b

ab  或a+b

f = open('cai.log','r',encoding="utf-8")
i1 = f.read()
f.close()
print(i1)

結果:
中國

基本打開:

#1、只讀r
i1 = open('cai.log','r')
i2 = i1.read()
i1.close()
print(i2)

#2、w,只寫模式,清空原來的內容,重新輸入,文件不存在則創建
i3 = open('cai.log','w')
i4 = i3.write('111')
i3.close()

#3、x,只寫模式,原來有內容則報錯
i5 = open('cai.log','x')
i6 = i5.write('222')
i5.close()

#4、追加模式,追加在末尾
i1 = open('cai.log','a')
i2 = i1.write('222')
i1.close()

以位元組(二進位)的方式打開:

①只讀,rb

②只寫wb

 

 

 

 

 

 

 

 

關閉:

with open("cai.log","r") as f:

  f.read()

執行過後自己關閉,不需要close

 

Python2.7之後,with可以同時支持打開兩個文件:

with open("log1") as obj1,open("log2") as obj2:

  pass

 

 不需要消耗很大的記憶體的複製

 

 

  

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.新建項目選擇ASP.net MVC 4 Web應用程式 2.選擇Web API c 3.在新建立的項目裡面有已經生成的webapi模版 其中App_Start文件夾下WebApiConfig.cs和RouteConfig.cs文件主要配置api的路由信息。 Controllers文件夾下的文件為 ...
  • 1. 前言 最近在自定義Expander的樣式,順便看了看它的源碼。 Expander控制項是一個ContentControl,它通過IsExpanded屬性或者通過點擊Header中的ToggleButton控制內容展開或隱藏。UWP SDK中沒提供這個控制項,而是在UWP Community Too ...
  • private void UnsetReadOnly(string dirPath) {//http://bbs.csdn.net/topics/380233913 string[] dirPathes = Directory.GetDirectories(dirPath, "*.*", Searc ...
  • sh是一個比subprocess好的庫,能夠執行shell命令 1.查看ip: [root@iZj6cbstl2n6r280a27eppZ myblog]# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet ...
  • Celery 4.0支持django1.8及以上的版本,低於1.8的項目使用Celery 3.1。 一個django項目的組織如下: 首先建立proj/proj/celery.py文件: 然後要保證django項目啟動時上述的app被載入,修改proj/proj/__init__.py文件: 現在就 ...
  • 當前的文檔寫於Jenkins2.46.2,如果後期更新了,有不對的地方需要及時改正 SSH-key管理 Jenkins的pipeline中包含git,所以可以在Jenkins中添加自己的部署秘鑰 在Jenkins->Credentials->System中,可以新建Domain,如:git.codi ...
  • 按照格式輸出提交號 作者 時間 git log --pretty=format:"%h %an %cd" --date=iso 獲取所有遠程的tag和他的commit sha1 git ls-remote --tags origin | grep [0-9]$ 獲取從 開始時間 到 結束時間 之間的 ...
  • SourceTree比命令行更容易操作,能更直觀看到發生了什麼。但是沒有哪一家git圖形化軟體能完成git的所有操作,封裝後的使用也隱藏了git的一些細節,在圖形化工具出現一些非常罕見的情況時,還是需要使用命令行輔助。 克隆項目 Source URL 為git地址的URL,推薦使用SSH地址,因此在 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...