Python学习Day2笔记(字符编码和函数)
1、字符编码
#ASCII码里只能存英文和特殊字符 不能存中文 存英文占1个字节 8位
#中文编码为GBK 操作系统编码也为GBK
#为了统一存储中文和英文和其他语言文字出现了万国码Unicode 所有一个字符都占2个字节 16位
#英文文档改为Unicode编码大小变大一倍 为解决这种浪费空间问题
#出现了Unicode扩展集 Utf-8 为可变长的字符编码 默认英文字符按ASCII码存储 中文按照3个字节存储

编码都要先decode成unicode再转码成目标编码

#获取默认编码
import sys
print(sys.getdefaultencoding())
#文件头声明编码
#-*- coding:gbk -*-
#文件转码都要先转换成Unicode再转换成目标编码
#转换成Unicode时需要decode("自身编码") 并且传入自身编码即可以转换成unicode
#再转换成目标编码时 要encode("目标编码")
#ptyon3里 encode的时候不仅转换了编码 还变成了bits
s="你好"
#转换成gbk编码
s_gbk=s.encode("gbk")
print(s_gbk)
#gbk转换成utf-8
s_utf8=s_gbk.decode("gbk").encode("utf-8")
print(s_utf8)
#utf-8转换为gb2312
s_gb2312=s.encode("gb2312")
print(s_gb2312) #gb2312转换为gbk
s_gbk2=s_gb2312.decode("gb2312").encode("gbk")
print(s_gbk2)
#gb2312转换为utf-8
s_utf8_2=s_gb2312.decode("gb2312").encode()
print(s_utf8_2)
print(s.encode("utf-8").decode("utf-8").encode("gb2312").decode("gb2312"))
#gbk向下兼容gb2312和gb23180 2、函数 1)函数定义
#定义函数的方法
def test(x):
'''the fuction definition'''
x=1
return x def 定义函数关键字
test 函数名
() 内可定义形参
"" 文档描述(非必要,但是强烈建议为你的函数添加描述信息)
x=x+1 泛指代码块或程序处理逻辑
return 定义返回值
2)函数和过程的区别
#面向对象 --> 类--> class
#面向对象 -->过程 --> def
#函数式编程-->函数-->def
#定义函数 有返回值
def fun1():
print("in the fun1")
return 0 #定义过程 没有返回值 程序默认返回None
def fun2():
'''test1'''
print("in the fun2") x=fun1()
y=fun2() print("from func1 return is %s" % x)
print("from func2 return is %s" % y)
3) 返回值
#函数返回值 是整个函数执行的结果 可以是任意值
#数字 字符 列表 字典 方法
# 返回None
def test1():
print("test1")
#返回 0
def test2():
print("test2")
return 0 #返回 1,"123",[1,2,3],{"11":"22","33":"44"}
def test3():
print("test3")
return 1,"123",[1,2,3],{"11":"22","33":"44"}
#返回方法
def test4():
print("test4")
return test1()
4)函数参数及调用 形参:往方法里传入的参数 位置参数
实参:实际存在于内存空间的
形参与实参一一对应
def test(x,y): #x,y形参
print(x)
print(y) test(1,2) #1,2 实参数
#位置参数调用:按顺序匹配形参和实参
test(1,2)
#关键字调用: 指定形参和实参的对应关系,与形参顺序无关
test(y=1,x=2)
#Error 位置参数调用不能和关键字调用混合调用
#混合用会按照位置参数来
#test(x=2,4)
#OK 关键字参数一定要在位置参数后
test(3,y=4)
#默认参数 :定义方法的时候给形参一个默认值
#特点:调用的时候 默认参数非必传
#用途:
def test1(x,y=2):
print(x)
print(y) test1(1)
test1(2,3)
#参数组(*args) 可接收多个位置参数转换为元组
#*表示个数不固定 args为形参数名
def test(*args):
print(args) test(1,2,3)
test("111")
#输出 (1, 2, 3, 4, 5)
test(*[1,2,3,4,5])
#输出([1, 2, 3, 4, 5],)
test([1,2,3,4,5]) def test1(x,*args):
print(x)
print(args) test1(1,2,3,4,5) #接收字典 **kwargs 接收多个关键字参数转化为字典
def test3(**kwargs):
print(kwargs)
print(kwargs["name"])
print(kwargs["age"]) #输出 {'name': '111', 'age': '20'}
test3(name='111',age='20',title="it")
test3(**{"name":"22","age":"18"})
#可扩展参数方法
def test4(name,age=18,*args,**kwargs):
print(name)
print(age)
print(args)
print(kwargs)
# test4("anne",age="18",sex="m")
# test4("lily",sex="f")
#不能写test4("alex",age=20,30,40,hobby="llll")
test4("alex",20,30,40,hobby="llll")
5)局部变量与作用域
#在子程序中定义的变量为局部变量, 在程序一开始定义的变量为全局变量
#全局变量的作用域是整个程序,局部变量的作用域是定义该变量的子程序
#当全局变量与局部变量同名时
#在定义局部变量的子程序内,局部变量起作用。在其他地方全局变量起作用 #局部变量:name 只在方法change_name里生效
#change_name就是name的作用域
def change_name(name):
print("befor change %s " % name)
name="Alex"
print("after change %s " % name) name="alex"
change_name(name)
print(name) #全局变量:在文件顶级定义的变量
#全局变量:数字、字符串、元组在函数里是改不了 。其他都可以改
#如果一定要在方法里改 在用之前加上golbal 也是可以改的
school="Oldboy edu."
def test1():
global school #可以改了
school="alex"
print(school)
test1()
print(school) names=["Anne","Joe","Sue"]
def test2():
names[0]="Anne1"
print(names)
test2()
6)递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自己本身,这个函数就是递归函数。 递归特性:
1.必须有一个明确的结束条件
2.每次更深入一层递归时,问题规模相比上次递归都应有所减少
3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过我,会导致栈溢出)
#递归例子
def calc(n):
print(n)
if int(n/2)>0:
return calc(int(n/2))
else:
return n calc(10) 7) 函数式编程


8)高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就能接收另一个函数作为参数,这种函数就称之为高阶函数。
#高阶函数例子
def add(a,b,f):
return f(a)+f(b)
#abs 内置函数 求绝对值
print(add(3,-6,abs))
Python学习Day2笔记(字符编码和函数)的更多相关文章
- Python 基础篇:字符编码、函数
字符编码 在python2默认编码是ASCII, python3里默认是utf-8 unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so ...
- Python学习Day2笔记(集合和文件操作)
1.集合的使用 列表是有序的可包含重复内容的 集合是无序的不可包含重复内容的 1) 集合关系测试 #列表去重list_1=[1,4,5,6,7,8,9,7,5,4,23,2] #有重复数据 list_ ...
- Python学习基础笔记(全)
换博客了,还是csdn好一些. Python学习基础笔记 1.Python学习-linux下Python3的安装 2.Python学习-数据类型.运算符.条件语句 3.Python学习-循环语句 4. ...
- python之旅:字符编码
一 了解字符编码的知识储备 一 计算机基础知识 知识储备:cpu.内存.硬盘 二 文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启动了一个进程,是在 ...
- python基础——6(字符编码,文件操作)
今日内容: 1.字符编码: 人识别的语言与机器识别的语言转化的媒介 ***** 2.字符与字节: 字符占多少字节,字符串转化 *** 3.文件操作: 操作硬盘中的一块区域:读写操作 ...
- python文件操作:字符编码与文件处理
一.字符编码 二.文件处理 一.字符编码 储备知识点: 1. 计算机系统分为三层: 应用程序 操作系统 计算机硬件 2. 运行python程序的三个步骤 1. 先启动python解释器 2. 再将py ...
- python开发基础之字符编码、文件处理和函数基础
字符编码 为什么要有字符编码? 字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1". 一个文件用什么编码方式存储 ...
- python编程笔记--字符编码
ASCII码.Unicode.utf-8 ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电 ...
- python学习day2
一.模块初识 python模块 模块让你能够有逻辑地组织你的Python代码段. 把相关的代码分配到一个 模块里能让你的代码更好用,更易懂. 模块也是Python对象,具有随机的名字属性用来绑定或引用 ...
随机推荐
- 从273二手车的M站点初探js模块化编程
前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...
- mailto实现将用户在网页中输入的内容传递到本地邮件客户端
背景: 想在自己的网站中有这样一个设计: 用户点击提交按钮之后,就会打开本地邮件客户端,并自动将他在输入框中输入的内容作为邮件的内容,像下面这样: mailto可以帮助实现这个功能. 简介: mail ...
- 总结:如何使用redis缓存加索引处理数据库百万级并发
前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据, ...
- MSSQL练习题
下列属于SQL Server的系统数据库是( ) A.modelB.publicC.NorthwindD.System 答案:http://hovertree.com/tiku/bjaf/06nvv7 ...
- Mac 热键大全
屏幕捕捉快捷键动作............................保存到............-快捷键 全屏捕捉........................桌面(.PDF文件)..... ...
- 手游聚合SDK开发之远程开关---渠道登入白名单
白名单有啥好说的呢?无非就是筛选登入,大家第一眼看到就是这个印象,白名单也是有文章的,弄的时机不同会给你带来很不错的收益,注意是收益.还是举例来说,游戏上线前渠道都会做一个预下载,一般提前1-2天,这 ...
- gearman 安装
yum install gperfyum install libevent-develyum install libuuid-develwget https://launchpad.net/gearm ...
- 【开源】C#跨平台物联网通讯框架ServerSuperIO(SSIO)
[连载]<C#通讯(串口和网络)框架的设计与实现>-1.通讯框架介绍 [连载]<C#通讯(串口和网络)框架的设计与实现>-2.框架的总体设计 目 录 C#跨平台物联 ...
- JavaScript 中的变量命名方法
三种命名方法 在程序语言中,通常使用的变量命名方法有三种:骆驼命名法(CamelCase),帕斯卡命名法(PascalCase)和匈牙利命名法. 依靠单词的大小写拼写复合词的做法,叫做"骆驼 ...
- iOS - UITableView中Cell重用机制导致Cell内容出错的解决办法
"UITableView" iOS开发中重量级的控件之一;在日常开发中我们大多数会选择自定Cell来满足自己开发中的需求, 但是有些时候Cell也是可以不自定义的(比如某一个简单的 ...