1、字符编码

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

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

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

8)高阶函数

变量可以指向函数,函数的参数能接收变量,那么一个函数就能接收另一个函数作为参数,这种函数就称之为高阶函数。

  1. #高阶函数例子
    def add(a,b,f):
    return f(a)+f(b)
    #abs 内置函数 求绝对值
    print(add(3,-6,abs))
  1.  
  1.  

Python学习Day2笔记(字符编码和函数)的更多相关文章

  1. Python 基础篇:字符编码、函数

    字符编码 在python2默认编码是ASCII, python3里默认是utf-8 unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so ...

  2. Python学习Day2笔记(集合和文件操作)

    1.集合的使用 列表是有序的可包含重复内容的 集合是无序的不可包含重复内容的 1) 集合关系测试 #列表去重list_1=[1,4,5,6,7,8,9,7,5,4,23,2] #有重复数据 list_ ...

  3. Python学习基础笔记(全)

    换博客了,还是csdn好一些. Python学习基础笔记 1.Python学习-linux下Python3的安装 2.Python学习-数据类型.运算符.条件语句 3.Python学习-循环语句 4. ...

  4. python之旅:字符编码

    一 了解字符编码的知识储备 一 计算机基础知识 知识储备:cpu.内存.硬盘 二 文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启动了一个进程,是在 ...

  5. python基础——6(字符编码,文件操作)

    今日内容: 1.字符编码: 人识别的语言与机器识别的语言转化的媒介 *****     2.字符与字节: 字符占多少字节,字符串转化 ***     3.文件操作: 操作硬盘中的一块区域:读写操作  ...

  6. python文件操作:字符编码与文件处理

    一.字符编码 二.文件处理 一.字符编码 储备知识点: 1. 计算机系统分为三层: 应用程序 操作系统 计算机硬件 2. 运行python程序的三个步骤 1. 先启动python解释器 2. 再将py ...

  7. python开发基础之字符编码、文件处理和函数基础

    字符编码 为什么要有字符编码? 字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1". 一个文件用什么编码方式存储 ...

  8. python编程笔记--字符编码

    ASCII码.Unicode.utf-8 ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电 ...

  9. python学习day2

    一.模块初识 python模块 模块让你能够有逻辑地组织你的Python代码段. 把相关的代码分配到一个 模块里能让你的代码更好用,更易懂. 模块也是Python对象,具有随机的名字属性用来绑定或引用 ...

随机推荐

  1. js实现StringBuffer

    实现 function StringBuffer() { this.__strings__ = []; }; StringBuffer.prototype.Append = function (str ...

  2. VR/AR 非技术总结

    VR/AR 非技术总结 **欢迎转载~转载请注明Erma的博客 http://www.cnblogs.com/Erma-king/** 都说2016是VR/AR的元年,上半年我随着新技术的潮流进入了V ...

  3. React-Native学习系列(二) Image和ScrollView

    接下来,我们接着(一)继续讲,今天我们学习的是Image组件和ScrollView组件. Image组件 Image:一个用于显示多种不同类型图片的React组件.那么要如何使用呢? 引入本地图片: ...

  4. ubuntu Chromium 安装 pepperflashplugin

    sudo apt-get update sudo apt-get install chromium-browser sudo apt-get install pepperflashplugin-non ...

  5. .NET Core 1.1 发布 文档下载资源汇总

    .NET Core 1.1 RTM 版2016/11/16 发布.对应发布 ASP.NET Core 1.1 .EF Core 1.1. 你可以通过Visual Studio 2015, Visual ...

  6. Linux(九)__网络测试

    1.确认ip地址.子网掩码.网关是正确的. ifconfig 2.确认局域网是互通的,访问别人的电脑.网关 ping 发送数据包接收数据包,设备是否联通 /etc/sysconfig/network- ...

  7. 在Thinkphp中使用AJAX实现无刷新分页

    在Thinkphp目录的Lib\ORG\Util\目录里新建AjaxPage.class.php,写入一下内容: <?php // +------------------------------ ...

  8. iOS 设置UILabel的行间距并自适应高度

    NSString *contentStr = @"总以为,在最初的地方,有一个最原来的我,就也会有一个最原来的你"; UILabel *tempLabel = [[UILabel ...

  9. IOS之Objective-C学习 代理设计模式

    鉴于Objective-C是不支持多继承的,所以需要用协议来代替实现其他类的方法,所以有了代理设计模式. 代理,又称委托,delegation. 代理模式可以让一个单继承的类实现父类以外其他类的方法. ...

  10. swift-字符和字符串

    OC定义字符: char charValue = 'a'; swift定义字符: var charValue : Character = "a" Unicode 国际标准的文本编码 ...