python3 encode函数参数_Python 3 学习笔记(四)----字符编码、函数与参数

一、字符编码与转码

1.在python2默认编码是ASCII, python3里默认是unicode

2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

在python2.x中:

1 -*- coding:UTF-8 -*-

2 importsys3 print(sys.getdefaultencoding()) #查看系统的默认编码

4

5 msg = "学习使人进步"

6 msg_gbk = msg.decode("UTF-8").encode("gbk") #由"UTF-8"格式转到"gbk",首先要将UTF-8解码成unicode,再由unicode编码成gbk。在解码时,要声明现在自己是什么格式的

7 msg_gb2312 = msg_gbk.decode("gbk").encode("gb2312")8

9 print(msg)10 print(msg_gbk)11 print(msg_gb2312)

在python3.x中:

1 #-*- coding:gbk -*-

2

3 importsys4 print(sys.getdefaultencoding())5 #如果文件编码改成gbk,需要在头声明是gbk(就是pycharm右下角)

6 msg = "三体" #这个"三体"的格式还是Unicode,因为改变的只是文件的编码,python的编码总是Unicode

7 print(msg)8

9

10 '''

11 #由UTF-8格式转到gbk格式12

13 s = "科幻小说"14 print(s.encode()) #打印utf-8的编码15 s_gbk = s.encode("gbk")16 print(s_gbk) #默认就是unicode,不用再decode(UTF-8是Unicode的扩展集)17

18 #由gbk格式再转回UTF-8格式19

20 s_utf8 = s_gbk.decode("gbk").encode("utf-8")21 print(s_utf8)22 '''

二、函数与函数式编程

编程的方法:

1.面向对象:特点-->类-->class

2.面向过程:特点-->过程-->def

3.函数式编程:-->函数-->def

函数的定义:

数学中:一般的,在一个变化过程中,假设有两个变量x、y,如果对于任意一个x都有唯一确定的一个y和它对应,那么就称x是自变量,y是x的函数。x的取值范围叫做这个函数的定义域,相应y的取值范围叫做函数的值域。

编程中:函数是逻辑结构化和过程化的一种编程方法。

Python中的函数定义法:

1 deftest(x):2 '''The function definitions'''

3 x+=1

4 returnx5

6

7 def:定义函数的关键字8 test:函数名9 ():内可定义形参10 '''''':文档描述(非必要,但是强烈建议为你的函数添加描述信息)11 x+=1:泛指代码块或程序处理逻辑12 return:定义返回值

函数型:

1 deffunc1():2 '''test1'''

3 print("this is func1")4 return05

过程型(将程序中每一种功能都定义为def包含的过程当中,使用的时候直接用函数名+()使用)

1 deffunc2():2 '''test2'''

3 print("this is func2")4 #过程就是没有返回值的函数

5

6 y = func2() #调用函数

使用函数替换重复的代码:

1 importtime2 deflogger():3 time_format = "%Y-%m-%d %X" #X代表时分秒

4 time_now =time.strftime(time_format)5 with open("log.txt","a+") as f:6 f.write("%s The end\n" %time_now)7 '''

8 def test1():9 '''testing'''

10 print("start append log...")11 with open("log.txt","a+") as f:12 f.write("The end")13

14 def test2():15 '''testing'''

16 print("start append log...")17 with open("log.txt","a+") as f:18 f.write("The end")19

20 def test3():21 '''testing'''

22 print("start append log...")23 with open("log.txt","a+") as f:24 f.write("The end")25 '''

26

27 deftest1():28 '''testing'''

29 print("start append log...")30 logger()31

32 deftest2():33 '''testing'''

34 print("start append log...")35 logger()36

37 deftest3():38 '''testing'''

39 print("start append log...")40 logger()41

42 x =test1()43 y =test2()44 z = test3()

函数三大优点:

1.代码重用

2.保持一致性

3.可扩展性

函数返回值:

1 deftest1():2 '''return test'''

3 msg = "刘慈欣 地球往事"

4 print(msg)5

6 deftest2():7 '''return test'''

8 msg = "刘慈欣 地球往事"

9 print(msg)10 returnmsg11

12 a =test1()13 b =test2()14

15 print("返回值为 [%s]" %a)16 print("返回值为 [%s]" %b)17

18 #当一个函数(过程型)没有使用return显示的定义返回值时,python解释器会隐式的返回None,所以在python中即便是过程也可视作函数

19

20 返回值数=0;返回None21 返回值数=1(例如"0");返回object22 返回值数>1(例如"0","[0,1,2.3]"多于1项);返回tupl23

24 #为什么要有返回值?因为想要一个函数的执行结果

三、参数

形参和实参:

形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体时使用形参,目的是在函数调用时接收实参

实参:实际参数,调用函数时传给函数的参数,可以是常量、变量、表达式、函数,传给形参

区别:形参时虚拟的,不占用内存空间,形参变量只有在调用时才分配内存单元,实参时一个变量,占用内存空间,实参传给形参,不能形参传给实参。

位置参数和关键字:(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)

1 def test(x,y,z): #这里xyz叫形参

2 print(x)3 print(y)4 print(z)5

6 test(1,3,5) #这里135叫实参。这种方式叫位置参数

7 test(y=1,x=4,z=5) #关键字参数

8 test(1,3,z=6) #这种写法也可以,但是关键字必须要在位置参数之后,并且不能重复

默认参数:

1 def test1(x,z,y=2):2 print(x)3 print(y)4 print(z)5

6 test1(1,5)7 test1(1,3)8

9 #默认参数特点:调用函数的时候,默认参数非必需传递

10 #默认参数用途:软件安装时的默认选项,连接数据库时的默认端口

参数组:

1 def test2(*args): #*args只能接收位置参数,不能接收关键词参数

2 print(args)3

4 test2(1,2,3,6,8,9)5 test2(*[2,4,6,2]) #args=tuple[2,4,6,2]

6

7 def test3(x,*args):8 print(x)9 print(args)10

11 test3(1,2,3,4,5,6,7,8,9,) #这里1传给x,剩下的变成元组传给args

12

13 def test4(**kwargs): #**kwargs:把N个关键字参数转换成字典的方式

14 print(kwargs)15 print(kwargs["name"])16 print(kwargs["age"])17 print(kwargs["IQ"])18

19 test4(name="Irlo",age=26,sex="F",IQ=220)20 test4(**{"name":'Irlo',"age":'26',"IQ":'220'})21

22

23 def test5(name,**kwargs):24 print(name)25 print(kwargs)26

27 test5("Irlo") #如果不给kwargs传东西则返回一个空字典

28 test5("hehe",age=26,IQ=220) #**kwargs不能接收位置参数

29

30

31 def test6(name,age=26,**kwargs): #参数组必须放在最后

32 print(name)33 print(age)34 print(kwargs)35

36 test6("Irlo",35,IQ=220,sex="m") #默认参数可以用位置参数的方式赋值,或用关键字的方式赋值,如果不赋值则使用默认参数

37

38

39 def test7(name,age=26,*args,**kwargs):40 print(name)41 print(age)42 print(args)43 print(kwargs)44 logger("Force")45

46 def logger(source): #函数test7中嵌套一个函数logger,该logger的声明必须要早于函数test7的调用,否则报错

47 print("from %s" %source)48

49 test7("Irlo",54,5,IQ=220,sex="M")

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值