字符编码转换

函数

#声明文件编码,格式如下:

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

注意此处只是声明了文件编码格式,python的默认编码还是unicode

字符编码转换:


  1. import sys
  2. print(sys.getdefaultencoding()) #查询当前编码
  3. s = "你好" #python默认编码为unicode
  4.  
  5. print(s.encode("utf-8")) #转换为utf-8编码
  6. t = b'\xe4\xbd\xa0\xe5\xa5\xbd' #二进制转换为str
  7. print(t.decode())

  8. >>>>
  9. utf-8                #查询当前编码为utf-8
  10. b'\xe4\xbd\xa0\xe5\xa5\xbd' #unicode 转换为utf-8 在python3中默认打印格式为二进制格式
    你好 #转换为str
  1. print(s.encode("utf-8").decode("utf-8").encode("gbk")) #注意encode的时候括号里写要转成的编码,decode的时候括号里写原始文件的编码!
    >>>>>b'\xc4\xe3\xba\xc3'
  1.  

函数


定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

特性:

1.减少重复代码
2.使程序变的可扩展
3.使程序变得易维护

函数的语法结构:

  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','')
  8. print(jimi)
  1. #函数和while循环结合
  2. def get_formatted_name(firstname,lastname):
  3. full_name = firstname+' '+lastname
  4. return full_name.title()
  5. while True:
  6. f_name = input("input your firstname:") #函数的实参,可通过inpu函数进行输入
  7. if f_name == "q":
  8. break
  9. l_name = input("input your lastname:")
  10. if l_name == "q":
  11. break
  12. musician = get_formatted_name(f_name, l_name)
  13. 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. print_design = ['','','','']
  16. complete_design = []
  17.  
  18. print_models(print_design,complete_design)
  19. show_completed_models(complete_design)
  1. def test1():
  2. print("in the test1")
  3. return 1,"gkx",["cc","dd"],{"zoo":"chimpanzee"} #return可以多个值,包括可以return函数
  4.  
  5. def test2():
  6. print("in the test2")
  7. return test1(),"aaaaaaaaaa"              #return函数
  8.  
  9. y = test1()
  10. x = test2()
  11. print(x,y)
  12.  
  13. >>>>>
  14. in the test1
  15. in the test2
  16. in the test1 #test2()在returnt test1 的时候,会运行一遍test1() 并返回其return值
  17. ((1, 'gkx', ['cc', 'dd'], {'zoo': 'chimpanzee'}), 'aaaaaaaaaa') (1, 'gkx', ['cc', 'dd'], {'zoo': 'chimpanzee'})
return:
返回值数=0:返回None
返回值数=1:返回object,python返回值时对象
返回值数>1,返回tuple
 
 
定义参数组:非固定参数
  1. def test(*args): #接收多个位置参数,转换为元组
  2. print(args)
  3.  
  4. test(1,2,3,4,5,6,6) #实参传入的时候,数量可以不固定,
  5. test(*[1,2,3,4,5])   #第二种传值方法
  6.  
  7. >>>>>
  8. (1, 2, 3, 4, 5, 6, 6) #打印的时候以元组表示
  9. (1, 2, 3, 4, 5)
  1. def test2(**kwargs): #接收多个关键字参数,转换为字典
  2. print(kwargs)
  3.  
  4. test2(name='gkx',age='',sex='male') #也有两种传值方式
  5. test2(**{'name':'gkx','age':''})
  6.  
  7. >>>>>
  8. {'name': 'gkx', 'age': '', 'sex': 'male'}
  9. {'name': 'gkx', 'age': ''}

非固定参数的传参方式,也可以如下所示

  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. 9 foo(**{"a":2,"b":3,"c":4,"d":5}) # *(1,2,3)解释器将自动进行解包然后传递给多个单变量参数(参数个数要对应相等)。序列解包要在关键参数和  **参数 之前进行处理
  10. 10 foo(*[1,2,3,4,5])
  1. >>> msg = {'num':1,'num2':2}
  2. >>> def test(msg): #当设置形参的时候没有用 **msg,可以直接用字典传参
  3. print(msg['num']+msg['num2'])
  4.  
  5. >>> test(msg)
  6. 3

当设置形参的时候没有用 **msg,可以直接用字典传参

  1. 》》》》
  2. () {'age': 1, 'name': 'ddd'}
  3. {'a': 2, 'b': 3, 'c': 4, 'd': 5}
  4. ()
  5. {}
  6. (1, 2, 3, 4, 5)
  1. >>> test(1,2,1,c=3)
  2. 1 2 (1,) {'c': 3}
  3. >>> def test(x,y=0,*args,**kwargs): #args可以放在默认参数的前面或者后面,不过要注意传参的方式
  4. print('x是:',x)
  5. print('y是:',y)
  6. print('args是:',args)
  7. print('kwargs是',kwargs)
  8.  
  9. >>> test(1,2,3,a=5)
  10. x是: 1
  11. y是: 2
  12. args是: (3,)
  13. kwargs {'a': 5}
  14. >>> def test(x,*args,y=0,**kwargs):
  15. print('x是:',x)
  16. print('y是:',y)
  17. print('args是:',args)
  18. print('kwargs是',kwargs)
  19.  
  20. >>> test(1,2,3,a=5)
  21. x是: 1
  22. y是: 0
  23. args是: (2, 3) #如果args放在默认参数前,需要指定默认参数的值,不然会被传入args
  24. kwargs {'a': 5}
  25. >>> test(1,2,y=3,a=5)
  26. x是: 1
  27. y是: 3
  28. args是: (2,)
  29. kwargs {'a': 5}
  30. >>>

位置参数,参数组的顺序

小结:

def test1(*args):  接收多个位置参数,转换为元组   ,【接收不到关键字参数】

def test2(**kwargs)    接收多个关键字参数,转换为元组

 若混合使用,则  位置参数最前,关键字参数居中,参数组一定放最后。

Python—字符编码转换、函数基本操作的更多相关文章

  1. day4学python 字符编码转换+元组概念

    字符编码转换+元组概念 字符编码转换 #coding:gbk //此处必声明 文件编码(看右下角编码格式) #用来得到python默认编码 import sys print(sys.getdefaul ...

  2. php 字符编码转换函数 iconv mb_convert_encoding比较

    在使用PHP处理字符串时,我们经常会碰到字符编码转换的问题,你碰到过iconv转换失败吗? 发现问题时,网上搜了搜,才发现iconv原来有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时, ...

  3. python 字符编码 转换

    #!/bin/env python#-*- encoding=utf8 -*-# 文件头指定utf8编码还是乱码时,使用下面方式指定# fix encoding problem import sys ...

  4. python字符编码转换说明及深浅copy介绍

    编码说明: 常用编码介绍: ascii 数字,字母 特殊字符. 字节:8位表示一个字节. 字符:是你看到的内容的最小组成单位. abc : a 一个字符. 中国:中 一个字符. a : 0000 10 ...

  5. Python字符编码转换

    编码回顾 在备编码相关的课件时,在知乎上看到一段关于Python编码的回答这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有一天它会猝不及防坑你一把.不过感觉这哥们的答案并没把编码问题写 ...

  6. PHP iconv()编码转换函数用法示例

    PHP iconv()字符编码转换函数的用法,iconv()函数,在php5中是内置的,语法格式:iconv("UTF- 8","GB2312//IGNORE" ...

  7. python字符编码(二)

    一.什么是字符编码 计算机要想工作必须通电,也就是说‘电’驱使计算机干活,而‘电’的特性,就是高低电压(高低压即二进制数1,低电压即二进制数0),也就是说计算机只认识数字 编程的目的是让计算机干活,而 ...

  8. 深入理解Python字符编码--转

    http://blog.51cto.com/9478652/2057896 不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError ...

  9. 深入理解Python字符编码

    不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError.UnicodeDecodeError 错误,每当遇到错误我们就拿着 enc ...

随机推荐

  1. ionic 需要注意的知识点

  2. 024-母版页MasterPage

    网站的布局通常是统一的,上面是Logo.菜单条.下面是公司地址.版权声明等.如果每个页面都重复做这些功能的话:重复性劳动.一旦修改那么每个页面都要修改..Net中一般用母版(MasterPage)技术 ...

  3. poj 1164 深度优先搜索模板题

    #include<iostream> //用栈进行的解决: #include<cstdio> #include<algorithm> #include<cst ...

  4. q次询问,每次给一个x,问1到x的因数个数的和。

    q次询问,每次给一个x,问1到x的因数个数的和. #include<cmath> #include<cstdio> #include<cstring> usingn ...

  5. PowerShell 语法备忘

    1.挡可能出现 .0 的时候需要加上引号 2.使用 -Join 或者 + 进行字符串拼接 3.在cmd 命令下可以使用 set /a  s=1+2  表示需要进行计算,而不是拼接

  6. Porsche Piwis Tester II V14.000 with CF30 Laptop at autonumen.com

    Porsche piwis tester ii is the latest professional tester for Porshe,the most poweful diagnose and o ...

  7. js 计算后样式封装

    function getStyle(obj,attr){ // 需要获取的元素 属性 if(obj.currentStyle){ return obj.currentStyle[attr]; }els ...

  8. Python3 批量更改文件后缀名

    Python3 批量更改文件后缀名 示例: # coding:utf8 import os import sys def Rename(): #Path = "F:\\test\\" ...

  9. Html textarea 标签

    Html textarea 标签 </body> </html> <!-- textarea 标签输入多行文本框,name="xxx"标识后端获取名称 ...

  10. #分组背包 Educational Codeforces Round 39 (Rated for Div. 2) D. Timetable

    2018-03-11 http://codeforces.com/contest/946/problem/D D. Timetable time limit per test 2 seconds me ...