1、字符编码与转码python
1.在python2默认编码是ASCII, python3里默认是utf-8编程
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编程语言
in python3
#-*-coding:gb2312 -*- #这个也能够去掉 __author__ = 'xxx' import sys print(sys.getdefaultencoding()) msg = "姆巴佩" #msg_gb2312 = msg.decode("utf-8").encode("gb2312") msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔,若是是py2需先解码成unicode再编码成gb2312 gb2312_to_unicode = msg_gb2312.decode("gb2312") gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8") print(msg) print(msg_gb2312) print(gb2312_to_unicode) print(gb2312_to_utf8)
函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不一样的,编程中的函数在英文中也有不少不一样的叫法。在BASIC中叫作subroutine(子过程或子程序),在Pascal中叫作procedure(过程)和function,在C中只有function,在Java里面叫作method。函数式编程
特性:一、减小重复代码
函数
二、提高程序拓展性编码
三、提高程序可维护性spa
def sayhi():#函数名 print("Hello, I'm xxx!") sayhi() #调用函数
函数参数设计
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。所以,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量3d
实参能够是常量、变量、表达式、函数等,不管实参是何种类型的量,在进行函数调用时,它们都必须有肯定的值,以便把这些值传送给形参。所以应预先用赋值,输入等办法使参数得到肯定值
#下面这段代码 a,b = 5,8 c = a**b print(c) #改为用函数写 def calc(x,y): #xy是形参 res = x**y return res #返回函数执行结果 c = calc(a,b) #结果赋值给c变量(ab是实参) print(c)
默认参数
def stu_register(name,age,course,country="CN"): print("----注册学生信息------") print("姓名:",name) print("age:",age) print("国籍:",country) print("课程:",course)
stu_register("xxx",18,"music")
若是country不指定默认就是CN,指定了的话就是你指定的值。
正常状况下,给函数传参数要按顺序,不想按顺序就能够用关键参数,只需指定参数名便可,但记住一个要求就是,关键参数必须放在位置参数以后。
stu_register(age=18,name='xzx',course="music",)
非固定参数
若你的函数在定义时不肯定用户想传入多少个参数,就可使用非固定参数
def stu_register(name,age,*args): # *args 会把多传入的参数变成一个元组形式 print(name,age,args) stu_register("xxx",18) #输出 #xxx 18 () #后面这个()就是args,只是由于没传值,因此为空 stu_register("messi",31,"ARG","football") #输出 # messi 31 ('ARG', 'football')
全局与局部变量
name = "xxx" def change_name(name): print("before change:",name) name = "zed" print("after change", name) change_name(name) print("全局",name)
输出
before change: xxx
after change zed
全局 xxx在函数内部,能够调用其余函数。若是一个函数在内部调用自身自己,这个函数就是递归函数。
返回值
要想获取函数的执行结果,就能够用return语句把结果返回
注意:一、函数在执行过程当中只要遇到return语句,就会中止执行并返回结果,so 也能够理解为 return 语句表明着函数的结束
二、若是未在函数中指定return,那这个函数的返回值为none
递归
在函数内部,能够调用其余函数。若是一个函数在内部调用自身自己,这个函数就是递归函数。
def calc(n): print(n) if int(n/2) ==0: return n return calc(int(n/2)) calc(10) 输出: 10 5 2 1
递归特性:
一、必须有一个明确的结束条件
二、 每次进入更深一层递归时,问题规模相比上次递归都应有所减小
3.、递归效率不高,递归层次过多会致使栈溢出(在计算机中,函数调用是经过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。因为栈的大小不是无限的,因此,递归调用的次数过多,会致使栈溢出)
3、函数式编程介绍
函数是Python内建支持的一种封装,咱们经过把大段代码拆成函数,经过一层一层的函数调用,就能够把复杂任务分解成简单的任务,这种分解能够称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。
函数式编程中的函数这个术语不是指计算机中的函数(其实是Subroutine),而是指数学中的函数,即自变量的映射。也就是说一个函数的值仅决定于函数参数的值,不依赖其余状态。好比sqrt(x)函数计算x的平方根,只要x不变,不论何时调用,调用几回,值都是不变的。
Python对函数式编程提供部分支持。因为Python容许使用变量,所以,Python不是纯函数式编程语言。
1、定义
简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。
主要思想是把运算过程尽可能写成一系列嵌套的函数调用。举例来讲,如今有这样一个数学表达式:
(1 + 2) * 3 - 4
传统的过程式编程,可能这样写:
var a = 1 + 2;
var b = a * 3;
var c = b - 4;
函数式编程要求使用函数,咱们能够把运算过程定义为不一样的函数,而后写成下面这样:
var result = subtract(multiply(add(1,2), 3), 4);
这段代码再演进如下,能够变成这样
add(1,2).multiply(3).subtract(4)
这基本就是天然语言的表达了。再看下面的代码,你们应该一眼就能明白它的意思吧:
merge([1,2],[3,4]).sort().search("2")
所以,函数式编程的代码更容易理解。
高阶函数
变量能够指向函数,函数的参数能接收变量,那么一个函数就能够接收另外一个函数做为参数,这种函数就称之为高阶函数。
def add(x,y,f): return f(x) + f(y) res = add(3,-6,abs) print(res)