python系列3

来源:http://www.cnblogs.com/huwentao/archive/2017/06/16/7003517.html
-Advertisement-
Play Games

目錄 自定義函數 內置函數 文件的操作 練習題 一. 自定義函數 1. 函數的創建 2. 函數的參數 (1)參數的定義 參數是使用通用變數來建立函數和變數之間關係的一個變數。我們都知道函數是用來被調用的,當我們需要給這個函數傳送值的時候,參數用來接收調用者傳遞過來的數據,並保存下來作為一個變數以便後 ...


目錄

  • 自定義函數
  • 內置函數
  • 文件的操作
  • 練習題

一. 自定義函數

  1. 函數的創建

函數的創建
1.def關鍵字
2.函數名+()
3.冒號
4.縮進
5. return返回值,可以不寫,預設的返回值為None
例:
def hanshuming():
    print(123)
    print(456)
    return True
hanshuming()

  2. 函數的參數

  (1)參數的定義

  參數是使用通用變數來建立函數和變數之間關係的一個變數。我們都知道函數是用來被調用的,當我們需要給這個函數傳送值的時候,參數用來接收調用者傳遞過來的數據,並保存下來作為一個變數以便後期使用。

  (2)參數的分類

    <1>.實參: 指的是用戶在調用函數的時候傳遞給函數的值。

    <2>.形參: 指的是在函數名後面括弧中寫入的參數,用來接收用戶的實際參數的。

      例:  

# a 指的是形參,用來接收用戶的實參
# lsjeg 是實參,用來傳遞給形參
def test(a):
    print(a)
test('lsjeg')

    

    <3>.指定參數: 指的是傳遞的參數。

    <4>.預設參數: 指的是函數名後面括弧內跟的參數,當沒有實參傳入的時候,預設是這個值。

      例:由結果可知,當傳遞的有實參的時候,將用實參,這就是指定參數,當沒有實參傳入的時候,就用預設值“中國”,這就是預設參數。

def test(a='中國'):
    print(a)
test(123)
test()
結果:
123
中國

 

    <5>.動態參數: 指的是加*號的參數。為什麼會有動態參數呢?其實就是python把所有的實參迴圈的放在一個元組裡面而已。

    <6>.普通參數: 指的是沒有加*的函數,他可以接受任意的實參。

      例:一個星號的動態參數

# a是普通參數
# *args是動態參數,把接收的所有參數都保存在一個元組中
# 動態參數必須放在普通參數後面
# 要註意的是Python他會自動的把第一個形參傳遞a,然後後面的都會傳遞給動態參數。
def test(a,*args):
    print(args)
test(123,'sl','s2','s3')

 

      例:兩個星號的動態參數(主要為了存儲字典) 

      註意他的結果,【11,22,33】前面有*,所以會把裡面的元素依次的放入元組中,

# a是普通參數
# *args是動態參數,把接收的所有參數都保存在一個元組中
# **kwargs也是動態參數,把接收的所有參數保存在一個字典中,註意,實參必須是鍵值對
# 一個*的必須在後面,兩個*的必須在一個*的後面
def test(a,*args,**kwargs):
    print(args)
    print(kwargs)
test(123,*[11,22,33],sle=23)
結果:
(11, 22, 33)
{'sle': 23}

  3. 變數

  <1>.全局變數:簡單來說就是沒有在函數中定義的變數。一般用大寫表示

  <2>.局部變數: 相反,就是在函數中定義的變數。一般小寫

    例1:

# 預設函數裡面是沒有辦法修改全局變數的
TEST = 123
def test(a):
    TEST = 456
test(1)
print(TEST)
結果:
123

    例2:修改全局變數

TEST = 123
def test(a):
    global TEST
    TEST = 456
test(1)
print(TEST)
結果:
456

 

  4. lambda表達式

  什麼是lambda表達式呢,其實就是對自定義函數的一個簡化,當然,他也是只能用於簡單的函數創建。  

  例:

# 定義了兩個函數,兩個函數的功能是一樣的
# 一般方式定義test
# lambda表達式定義的lambda_test

def test(a1, a2):
    return a1+a2

lambda_test = lambda a1,a2: a1+a2

print(test(1,2))
print(lambda_test(1,2))

 

  5. 三元表達式

  三元表達式是什麼東西呢,其實就是對if...else迴圈的一個簡化,但是只能用於簡單的if...else的簡化,在很多的語言中都有。

  例:if前面的為條件成立後執行的語句,else後面的為條件不成立時執行的語句

# 普通的判斷語句
a = 1
if a < 6:
    name = 'huwentao'
else:
    name = 'zhouyan'
print(name)

# 這個是三元表達式,
name = 'zhouyan' if a < 6 else 'huwentao'
print(name)

輸出結果:
huwentao
zhouyan

 

二. 內置函數簡介

1. str(), int(), bool(), list(), dict(), set(), tuple(), bytes(), type(), isinstance()
    這個是一系列的關於數據類型的函數,因為對於數據類型創建一般有兩種方式,
    例: <1>: i = 10 <2>: i = int(10)   這兩種方式是一樣的,其本質都是調用int函數的_init_函數去創建的對象,其他的類型也一樣
    type(): type() 可以顯示出類型
        例:
            i = 10
            print(type(i))
            結果:<class 'int'>
    isinstance(要判斷的數據, 數據類型): 用來判斷是不是某個類型
        例:
            i = 10 
            print(isinstance(i, int))
            結果: True 因為i就是int類型。所以返回True
    
2. bin(), int(), hex(), oct()
    這是一系列關於進位轉換的函數,
    bin(): 十進位轉二進位
        例:print(bin(10)) ----->0b1010
    hex(): 十進位轉十六進位
        例:print(hex(10)) ----->0xa
    oct(): 十進位轉八進位
        例:print(oct(10)) ----->0o12
    int(): 其他進位轉十進位
        例: 
            print(int('10101', 2))  #二進位---》十進位
            print(int('ab', 16))    #二進位---》十進位
            print(int('10', 8))     #二進位---》十進位
        結果:
            21  
            171
            8
3. repr(), ascii()
   這兩個函數差不多是一樣的,就是調用內置函數裡面的_repr__()

4. all(), any()
    all(): 裡面的變數全部為真,返回值為真
        例:
            print(all(['hu','zhou','xiaozhou']))
            print(all(['hu','zhou','xiaozhou','']))
        結果:
            True
            False   
    any(): 裡面的變數只要有一個為真,就返回為真
        例:
            print(any([]))
            print(any(['hu','zhou','xiaozhou']))
            print(any(['hu','zhou','xiaozhou','']))
        結果:
            False
            True
            True 

5. dir(), help()
    用來獲得當前模塊或者函數的屬性列表
    dir()  獲取簡單的屬性列表
        print(dir(list))
    help()  獲取詳細的屬性列表  
        help(list)
    
6. enumrate() ,len()
    會給一個序列在生成一列索引,由以下例子可以看出,自動增加縮進然後以一個元組的形式保存在i變數中
    例:
        list = ['hu','zhou','xiaozhou']
        for i in enumerate(list, 1):
            print(i)
    結果:
        (1, 'hu')
        (2, 'zhou')
        (3, 'xiaozhou')
    len(): 得到長度

7. max(), min(), sum(), sorted(), round(), reversed(), abs(), pow(), range(), divmod(), zip()
    這個是一系列關於數據操作的函數
    由名字可以看出,取最大值,最下值,求和,排序,四捨五入,翻轉,取絕對值,求冪運算,生成一個可迭代對象
    round():
        例:
            print(round(11.1))
            print(round(11.5))
            print(round(11.6))
        結果:
            11
            12
            12
    reversed():
        例:
            list = [99,32,1,232,44]
            print(sorted(list))
    range():生成一個可迭代對象
        例:
            a = range(10)
            print(a)
            for i in a:
                print(i, end = ' ')  
        結果:
            range(0, 10)
            0 1 2 3 4 5 6 7 8 9 
    divmod(): 把除數和餘數同時輸出來
        例:
        print(divmod(10, 3)) -----》 (3, 1)
    zip(): 結合兩個列表
        list = [11,22,33,44]
        hu = ['hu','zhou','xiaohu','xiaozhou']
        a = zip(list, hu)
        for i in a:
            print(i)
            
8. callable() 
    判斷裡面的數據是否可執行,一般函數和類是可執行的
    例:
        def test():
            return 10
        print(callable(1))
        print(callable('weg'))
        print(callable(test))
    結果:
        False
        False
        True
9. chr(), ofd() 
    chr(): 數字轉ascii
    ord(): asscii轉數字
    例:
        print(chr(69))
        print(ord('E'))
10. compile(),exec(),eval() 
    complie():用來編譯生成對象
    exec(): 用來執行編譯生成的對象
    例:
        str = '''
        for i in range(4):
            print(i)
        '''
        c = compile(str,'','exec')
        exec(c)
    eval():只能對簡單的代碼進行操作,不能進行代碼的執行
    例:
       print(eval('1+2')) 

11. local() globals(), hash()
    local():當前執行函數的所有局部變數
    globals:當前執行函數的所有全局變數
    hash(): 對裡面的數據進行hash運算
12. exit()
    exit(): 退出程式 
13. open(), import
    open是打開文件
    import導入模塊

14. filter(), map()
    filter(函數,過濾的對象): 每一個過濾的對象都相應的執行函數,當返回為真的時候,就返回回去,並且返回的是一個對象
    例:
        def hanshu(aa):
        if aa > 22:
            return True
        else:
            return False
        a = filter(hanshu, [11,22,33,44])
        print(a)
        for i in a:
            print(i)
    結果:
        <filter object at 0x000000A1636B4470>
        33
        44
    map(函數,對象):每一個過濾的對象都響應的代入函數中執行,返回的是他的返回值,而且返回的是一個對象
    例:
        def hanshu(aa):
        if aa > 22:
            return True
        else:
            return False
        a = map(hanshu, [11,22,33,44])
        print(a)
        for i in a:
            print(i)
    結果:
        <map object at 0x0000005B2B504470>
        False
        False
        True
        True
    
    

 

三. 文件的操作

  1. 文件的操作

  文件的基本操作有打開,和關閉,讀寫等。

# 一般在打開一個文件的時候會創建一個對象傳遞給一個變數f
# parameter1:文件名,如果是相對路徑,必須在一個目錄下麵
# parameter2:模式, 大致分為兩種r,w
# parameter3:編碼方式
f = open('parameter1','parameter2','parameter3')
f.close()

  2. 文件的模式

  (1)普通的讀寫

    <1>.  r: 只能讀,傳入的文件參數必須要存在,否則會報錯

# test在當前目錄下一定要存在
# flie.write不能用,只能讀
file = open('test','r')
data = file.read()
# file.write('lwjege')
file.close()   

    <2>.  w: 只能寫,不能讀,傳入的文件如果存在,就清空裡面的內容,如果不存在,就創建

# 當傳入的參數是w的時候,執行完此代碼再去查看test文件的時候,會發現裡面的內容為“大中國”,無論之前的內容是什麼,都是這個內容,因為寫操作不是追加的,而是先清空之前的內容然後在寫入。
file = open('test','w')
file.write('大中國')
file.close()

    <3>.  x: 只能寫,不能讀,傳入的文件不能存在,存在就報錯

#  這裡的參數test2在此目錄下麵不能存在,如果存在就會報錯,而且不能讀數據
file = open('test2','x')
# file.read()
file.write('大中國')
file.close()

 

    <4>.  a: 只能寫,不能讀,傳入的文件存在,就追加寫入,如果不存在,就創建

# 當傳入的參數是a的時候,不能讀數據,只能進行寫數據,而且他是追加寫入,不像w,會把之前的數據都清空
file = open('test','w')
file.write('大中國')
file.close()

  (2)可讀可寫

    以下的操作其實很大程度上是繼承了上面普通操作的屬性,只是加上+號的都是可讀可寫的,其餘的都基本上一樣。

    <1>.  r+: 可讀可寫,文件必須存在,不存在就報錯,而且他不是覆蓋存儲的,也不是清空之後存儲的。由以下例子可見,r+是從前往後覆蓋存儲的。

    例1:寫入文件

file = open('test','r+',encoding='utf-8')
print(file.tell())
file.write('我是中國人,我驕傲.')
file.close()
查看文件內容:
我是中國人,我驕傲.

 

    例2:再次寫入文件

file = open('test','r+',encoding='utf-8')
print(file.tell())
file.write('woshi')
file.close()
顯示文件文內容:
woshi�中國人,我驕傲.

     例3:有讀操作

# 只要是讀操作執行了,在寫的時候就會預設的在後面追加
with open('test','r+',encoding='utf-8') as f:
    print(f.tell())
    f.read(1)
    f.write('xxx')
原文件內容:123456
執行完上述操作的內容:123456xxx

    例4: 有讀操作,也有seek

# 如果在寫操作前面加上seek指定地址,寫操作就會再這個地址後面添加內容,覆蓋後面的內容
with open('test','r+',encoding='utf-8') as f:
    print(f.tell())
    f.read(1)
    f.seek(2)
    print(f.tell())
    f.write('xxx')

源文件內容:123456789
執行完代碼的內容:12xxx6789

 

    <2>.  w+: 可讀可寫,文件不存在可以創建,存在就清空再存儲

file = open('test','w+',encoding='utf-8')
print(file.tell())
file.write('woshidab')
file.close()
顯示內容:
woshidab

 

    <3>.  x+: 依然是文件不能存在,存在就報錯,可讀可寫。

file = open('test6','x+',encoding='utf-8')
print(file.tell())
# file.write('woshidab')
file.close()

 

    <4>.  a+: 可讀可寫,文件存在就追加存儲,文件不存在就創建。

file = open('test7','a+',encoding='utf-8')
print(file.tell())
file.write('woshidab')
file.close()

  (3)位元組方式的存儲

    r 和不加r的區別主要在於一個 是python內部自動給我們轉換成了字元串的格式,一個是沒有轉換的直接就是位元組格式。

    例:

# 此例可知道,加上b之後的的操作都是bytes,而不加b就是字元

file = open('test','r')
data = file.read()
print(type(data))
file.close()

file = open('test','rb')
data = file.read()
print(type(data))
file.close()
顯示結果:
<class 'str'>
<class 'bytes'>

    原理:

    

    <1>. rb: 和r的屬性都一樣,只是輸出的是位元組而已,我們把他轉換一下就可以了。

# 輸出的那一句做了位元組到字元串的轉換,編碼方式需要看test本身的編碼方式是什麼
file = open('test','rb')
data = file.read()
print(str(data,encoding='utf-8'))
file.close()

 

    <2>. wb: 和w的屬性都一樣,只是輸出的是位元組而已,我們把他轉換一下就可以了。

# 讀和寫的編碼方式要一樣
file = open('test','wb')
file.write(bytes('我是中國人',encoding='utf-8'))
file.close()

file = open('test','rb')
print(str(file.read(),encoding='utf-8'))
file.close()

輸出結果:
我是中國人

 

    <3>. xb: 和x的屬性都一樣,只是輸出的是位元組而已,我們把他轉換一下就可以了。

    <4>. ab: 和a的屬性都一樣,只是輸出的是位元組而已,我們把他轉換一下就可以了。

#  因為他是追加輸入,我多運行了幾次,因此顯示如下結果
file = open('test','ab')
file.write(bytes('我是中國人',encoding='utf-8'))
file.close()

file = open('test','rb')
print(str(file.read(),encoding='utf-8'))
file.close()

輸出結果:
我是中國人我是中國人我是中國人我是中國人

 

  3. 文件類的額外功能

flush:用來刷新緩衝區的,把緩衝區的內容寫入文件中而不需要等待文件被關閉,並清除緩衝區。
readline:一次讀入一行
tell: 獲取當前指針指向的位置
seek: 調整當前指針的指向的位置
truncate:用來截斷文件,當前內容後面的都將會被刪除
write: 寫入操作
read: 讀取操作
open: 打開文件
close: 關閉文件

  4. 同時打開多個文件

# 固定的格式 
with open('源文件','r') as obj1,with open('新文件','w') as obj2 for line in obj1: obj2.write(line)

四. 練習題:

1. 簡述普通參數,指定參數,預設參數,動態參數的區別

2. 寫函數,計算傳入字元串中【數字】,【字母】,【空格】以及【其他】的個數

# -*- coding:GBK -*-
# zhou
# 2017/6/13
def function1(a):
    digit = 0
    str = 0
    space = 0
    other = 0
    for i in a:
        if i.isdigit():
            digit += 1
        elif i.isalpha():
            str += 1
        elif i.isspace():
            space += 1
        else:
            other += 1
    return ({'數字':digit,'字元':str,'空格':space,'其他':other})
a = function1('234wlj**ego  ewjgo')
for i in a:
    print(i,a[i],'個')

顯示結果:
字元 11 個
空格 2 個
數字 3 個
其他 2 個

3. 寫函數,判斷用戶傳入的對象(字元串,列表,元組)長度是否大於5

 

# -*- coding:GBK -*-
# zhou
# 2017/6/13
def function(a):
    if len(a) <= 5:
        print('傳入的參數長度小於等於5')
    else:
        print('傳入的參數長度大於5')
function('lwejglejgl')
function([11,22,33,44])
function((1,2,3,4,5,6))
顯示結果:
傳入的參數長度大於5
傳入的參數長度小於等於5
傳入的參數長度大於5

4. 寫函數,檢查傳入列表的長度,如果大於2,那麼僅保留前兩個長度的內容,並將其作為新列表返回給調用者

# -*- coding:GBK -*-
# zhou
# 2017/6/13

def function(a):
    if isinstance(a,list):
        if len(a) > 2:
            ret = a[0:2]
        else:
            ret = a
    else:
        ret = a
    return ret
print(function([11,22,33,44]))
print(function(['hu','zhou']))
結果:
[11, 22]
['hu', 'zhou']

5. 寫函數,判斷用戶傳入的對象(字元串,列表,元組)的每一個元素是否含有空內容

# -*- coding:GBK -*-
# zhou
# 2017/6/13
def function(a):
    for i in range(len(a)):
        if a[i].count(' ') != 0:
            print('輸入的對象中第%d元素中含有空格'%(i+1))

function(['hu','zh ou'])

6. 寫函數,檢查獲取傳入列表或元組對象的所有奇數位索引對應的元素,並將其作為新列表返回給調用者

# -*- coding:GBK -*-
# zhou
# 2017/6/13

def function(a):
    ret = []
    for i in range(len(a)):
        if i % 2 == 1:
            ret.append(a[i])
    return ret
print(function(['hu','zhou','mage','laomanhai']))

7. 寫函數,檢查傳入字典的每一個value的長度,如果大於2,那麼僅保留前兩個長度的內容,並將其新內容返回給調用者

# -*- coding:GBK -*-
# zhou
# 2017/6/13
def function(a):
    ret = a
    for i in a.keys():
        if len(a[i]) > 2:
            ret[i] = a[i][0:2]
        else:
            ret[i] = a[i]
    return ret
print(function({'k1':'v1','hu':'haoshuai','zhou':'haomei'}))
結果:
{'k1': 'v1', 'zhou': 'ha', 'hu': 'ha'}

8. 驗證碼

# -*- coding:utf-8 -*-
# zhou
# 2017/6/14
import random
temp = str()
for i in range(6):
    num = random.randrange(0, 4)
    if num == 1 or num == 3:
        num = random.randrange(0, 10)
        temp = temp + str(num)
    else:
        rad = random.randrange(65, 91)
        rad = chr(rad)
        temp = temp + rad
print(temp)

  

 


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

-Advertisement-
Play Games
更多相關文章
  • 背水一戰 Windows 10 之 控制項(集合類 - ItemsControl 的佈局控制項): ItemsStackPanel, ItemsWrapGrid ...
  • 操作系統: CentOS 6.9_x64 go語言版本: 1.8.3 問題描述 golang沒有提供生成uuid的介面,但開發中確實需要uuid。 這裡把看到的代碼記錄下,也方便我以後查閱。 解決方案 示例代碼如下: 運行效果: 討論 當然如果你只是想快速的得到uuid,而且使用的是linux系統, ...
  • 學習Java繼承之前,我們想回憶一下Java面向對象需要特別註意的幾個關鍵點。 面向對象是將複雜的事情簡單化了,它通過封裝的方式使得代碼的重用性更高和安全性更強。平時我們要學會用面向對象的方式去思考,去描述事物或行為。 想要使用OOP,一定要清楚其三個主要特征: 1.對象的行為(behavior): ...
  • 1、問題:啟動Tomcat時報錯! 主要錯誤代碼如下 1 1 在這段代碼之前還有錯誤代碼: 1 1 2、出現錯誤的環境:spring MVC + MyBatis框架下,涉及有control層、service層、dao層。 3、問題分析:一開始以為是由於control層使用@Resource出現的異常 ...
  • 最近開發一個項目,需要調用第三方的介面,第三方提供的數據是xml,我直接使用Array2XML把php數組轉成XML格式。 XML格式如: 由於php數組無法指定多個重覆下標,後面的會覆蓋前面的值,最終只會展示一個值 上面php數組用Array2XML轉成XML,body裡面只會有一個item節點。 ...
  • 本文為公司製作API介面後臺的小結! 1.命名註意事項: 不要使用易混淆的名字,如index,index01... 我喜歡用拼音... 比如: 2.資料庫文件修改: 去database.php里把數據得首碼去掉; 3.獲取請求的值: 4.操作資料庫: (1)原生操作: (2)name查詢: 5.返回 ...
  • 前言: 這幾天剛剛開始學習python,然後就安裝了pycharm,但是那個中文亂碼的問題真是讓人心煩,在網上找了好久,都寫得好亂,今天終於讓我解決了,在這裡總結一下經驗,希望可以幫到你們 問題:如下圖,我的問題主要是在控制台輸入漢字的時候會出現以下亂碼 一般的解決方法 1. 首先如上圖所示,把fi ...
  • Java 數據類型 基本數據類型 數值:int、short、long 字元:char 布爾:boolean 引用數據類型 class(類) interface(介面) 數組[] 所占位元組數 ( ) int:4位元組 char: 規定2位元組。若使用UTF 8編碼,數字和英文等占1個位元組,中文3個位元組;若 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...