Python—字符編碼轉換、函數基本操做

字符編碼轉換python

函數數組

 

 

#聲明文件編碼,格式以下:app

#-*- coding:utf-8 -*-ide

注意此處只是聲明瞭文件編碼格式,python的默認編碼仍是unicode函數

 

字符編碼轉換:編碼


 

import sys
print(sys.getdefaultencoding())  #查詢當前編碼
s
= "你好" #python默認編碼爲unicode print(s.encode("utf-8")) #轉換爲utf-8編碼
t
= b'\xe4\xbd\xa0\xe5\xa5\xbd' #二進制轉換爲str print(t.decode())
>>>> utf
-8                #查詢當前編碼爲utf-8 b'\xe4\xbd\xa0\xe5\xa5\xbd' #unicode 轉換爲utf-8 在python3中默認打印格式爲二進制格式
你好 #轉換爲str

print(s.encode("utf-8").decode("utf-8").encode("gbk"))  #注意encode的時候括號裏寫要轉成的編碼,decode的時候括號裏寫原始文件的編碼!
>>>>>b'\xc4\xe3\xba\xc3'



 

 

 

函數spa


定義: 函數是指將一組語句的集合經過一個名字(函數名)封裝起來,要想執行這個函數,只需調用其函數名便可設計


特性:code

1.減小重複代碼
2.使程序變的可擴展
3.使程序變得易維護orm

 

函數的語法結構:

1 def greet_user(username):                   #定義函數名
2     print("Hello!",username.title(),"!")    #函數體
3 greet_user("ww")

 

函數的形參與實參

1 def describe_pet(pet_name,animal_type="dog"): #指定默認值的形參要放在最後面,否則會報錯
2     """顯示寵物信息"""
3     print("I have a %s.\nMy %s 's name is %s.\n"%(animal_type,animal_type,pet_name))
4 describe_pet("hamster","harry")               #位置實參位置要與形參一致,此處沒有,會變成 harry是寵物類型,hamster變成了寵物名字
5 describe_pet(pet_name="ww",animal_type="cat") #關鍵字實參
6 describe_pet(pet_name="ww")                   #當形參有默認值時,若不給形參傳遞實參,則默認輸出默認值

向函數傳遞實參的方式不少,可以使用位置實參,這要求實參的順序與形參的順序相同也可以使用關鍵字實參,其
中每一個實參都由變量名和值組成;還可以使用列表和字典。
函數describe_pet()仍是原來那樣,但調用這個函數時,咱們向Python明確地指出了各個實參對應的形參。
關鍵字實參的順序可有可無,由於Python知道各個值該存儲到哪一個形參中。
使用關鍵字實參時,若關鍵字和位置參數混合使用,關鍵字參數必定要放在位置參數後面

 

函數的返回值(關於return的理解,知乎這個回答很形象 https://www.zhihu.com/question/23765556/answer/25635772)

 1 def get_formatted_name(first_name,last_name,middle_name=''):   #此處給形參【middle_name】設置了默認值,讓實參變得可選
 2     """打印完整姓名"""
 3     if middle_name:                                            #若middle_name不爲空,則只都打印
 4         full_name = first_name+' '+middle_name+' '+last_name
 5     else:                                 #middle_name爲空,則只打印 firstname和lastname
 6         full_name = first_name+' '+last_name
 7     return  full_name.title()
 8 musician = get_formatted_name('jimi','alex','cily')
 9 musician2 = get_formatted_name('jimi','alex',)
10 print(musician,'\n',musician2)
1 def bulid_person(first_name,last_name,age=''):   #函數返回值爲字典
2     """返回我的信息到字典中"""
3     person = {'first':first_name,'last':last_name}
4     if age:
5         person['age'] = age
6     return  person
7 jimi = bulid_person('jimi','alex','22')
8 print(jimi)
 1 #函數和while循環結合
 2 def get_formatted_name(firstname,lastname):
 3     full_name = firstname+' '+lastname
 4     return  full_name.title()
 5  6 while True:
 7     f_name = input("input your firstname:")     #函數的實參,可經過inpu函數進行輸入
 8     if f_name == "q":
 9         break
10     l_name = input("input your lastname:")
11     if l_name == "q":
12         break
13     musician = get_formatted_name(f_name, l_name)
14     print(musician)
 1 def print_models(unprinted_design,completed_models):   #函數與列表
 2     """模擬打印每一個設計,直到沒有未打印的設計爲止
 3     打印每一個設計後,都將其移到列表completed_models中"""
 4     while unprinted_design:
 5         current_design = unprinted_design.pop()
 6         completed_models.append(current_design)
 7         print("Printing model:" + current_design)
 8 
 9 def show_completed_models(completed_models):
10     """顯示打印好的模型"""
11     print("The fllowing models have been printed: ")
12     for model_completed in completed_models:
13         print(model_completed)
14 
15 
16 print_design = ['1','2','3','4']
17 complete_design = []
18 
19 print_models(print_design,complete_design)
20 show_completed_models(complete_design)

 

def test1():
    print("in the test1")
    return 1,"gkx",["cc","dd"],{"zoo":"chimpanzee"}   #return能夠多個值,包括能夠return函數

def test2():
    print("in the test2")
    return test1(),"aaaaaaaaaa"              #return函數

y = test1()
x = test2()
print(x,y)

>>>>>
in the test1
in the test2
in the test1             #test2()在returnt test1 的時候,會運行一遍test1() 並返回其return值
((1, 'gkx', ['cc', 'dd'], {'zoo': 'chimpanzee'}), 'aaaaaaaaaa') (1, 'gkx', ['cc', 'dd'], {'zoo': 'chimpanzee'})
return:
返回值數=0:返回None
返回值數=1:返回object,python返回值時對象
返回值數>1,返回tuple
 
 
定義參數組:非固定參數
def test(*args):      #接收多個位置參數,轉換爲元組
    print(args)

test(1,2,3,4,5,6,6)    #實參傳入的時候,數量能夠不固定,
test(*[1,2,3,4,5])   #第二種傳值方法

>>>>>
(1, 2, 3, 4, 5, 6, 6)   #打印的時候以元組表示
(1, 2, 3, 4, 5)
def test2(**kwargs):    #接收多個關鍵字參數,轉換爲字典
    print(kwargs)

test2(name='gkx',age='99',sex='male')  #也有兩種傳值方式
test2(**{'name':'gkx','age':'99'})

>>>>>
{'name': 'gkx', 'age': '99', 'sex': 'male'}
{'name': 'gkx', 'age': '99'}

 

非固定參數的傳參方式,也能夠以下所示

 1 def f(*args,**kwargs): #位置參數、默認參數、**kwargs三者的順序必須是位置參數、默認參數、**kwargs,否則就會報錯:
 2     print(args,kwargs)
 3 
 4 f(age=1,name='ddd')
 5 
 6 def foo(*args,**kwargs):
 7     print(kwargs)
 8     print(args)
 9 foo(**{"a":2,"b":3,"c":4,"d":5})   # *(1,2,3)解釋器將自動進行解包而後傳遞給多個單變量參數(參數個數要對應相等)。序列解包要在關鍵參數和  **參數 以前進行處理
10 foo(*[1,2,3,4,5])
11 
>>> msg = {'num':1,'num2':2}
>>> def test(msg):  #當設置形參的時候沒有用 **msg,能夠直接用字典傳參
    print(msg['num']+msg['num2'])

>>> test(msg)
3
當設置形參的時候沒有用 **msg,能夠直接用字典傳參
12 》》》》
13 () {'age': 1, 'name': 'ddd'}
14 {'a': 2, 'b': 3, 'c': 4, 'd': 5}
15 ()
16 {}
17 (1, 2, 3, 4, 5)
>>> test(1,2,1,c=3)
1 2 (1,) {'c': 3}
>>> def test(x,y=0,*args,**kwargs): #args能夠放在默認參數的前面或者後面,不過要注意傳參的方式
    print('x是:',x)
    print('y是:',y)
    print('args是:',args)
    print('kwargs是',kwargs)

    
>>> test(1,2,3,a=5)
x是: 1
y是: 2
args是: (3,)
kwargs是 {'a': 5}
>>> def test(x,*args,y=0,**kwargs): 
    print('x是:',x)
    print('y是:',y)
    print('args是:',args)
    print('kwargs是',kwargs)

    
>>> test(1,2,3,a=5)
x是: 1
y是: 0
args是: (2, 3)  #若是args放在默認參數前,須要指定默認參數的值,否則會被傳入args
kwargs是 {'a': 5}
>>> test(1,2,y=3,a=5)
x是: 1
y是: 3
args是: (2,)
kwargs是 {'a': 5}
>>> 
位置參數,參數組的順序

 

 

小結:

def test1(*args):  接收多個位置參數,轉換爲元組   ,【接收不到關鍵字參數】

def test2(**kwargs)    接收多個關鍵字參數,轉換爲元組

 若混合使用,則  位置參數最前,關鍵字參數居中,參數組必定放最後。

相關文章
相關標籤/搜索