系统学习编程笔记(十)

• 完成 Python 教程

3. python基础

3.1 数据类型和变量

  • python的语句以冒号结尾时表示代码块,缩进时按约定俗成的应该是用4个空格的缩进,不要tab和空格混用。
  • python程序是大小写敏感的。
  • 缩进的坏处就是重构代码的时候必须重新检查缩进是否正确,另外IDE很难像格式化JAVA代码那也格式化python代码。
  • python可以处理的数据类型包括整数、浮点数、字符串、布尔值、空值(None)。
  • 整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
  • python中同一个 变量可以反复赋值,而且可以是不同的类型。这种变量本身类型不固定的语言称之为动态语言。与之对应的就是静态语言,如JAVA.
  • a = 'ABC'

    此时,python解释器干了两件事情:1)在内存中创建了一个'ABC'的字符串;2)在内存中创建了一个名为a的变量,并把它指向'ABC'

  • a = 'ABC'
    b = a
    a = 'XYZ'
    print(b)

    程序执行结果:‘ABC’

  • python中通常用全部大写的变量名表示常量。

  • 练习代码如下:

    n = 123
    f = 456.789
    s1 = '\'Hello,world\''
    s2 = '\'Hello,\\\'Adam\\\'\''
    s3 = 'r\'Hello,\"Bart\"\''
    s4 = 'r\'\'\'Hello,\nLisa!\'\'\''
    print('n=%d\nf=%0.3f\ns1=%s\ns2=%s\ns3=%s\ns4=%s'%(n,f,s1,s2,s3,s4))

    Python的整数没有大小限制,而某些语言的整数根据其存储长度是有大小限制的.

  • Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf.

3.2 字符串和编码

  • Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

  • Unicode通常两个字节表示一个字符。ASCII编码是1个字节表示一个字符。

  • 如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。

  • UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。

  • 现在计算机系统通用的字符编码工作方式:在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件;浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器。

  • 在最新的Python 3版本中,字符串是以Unicode编码的。

  • Python对bytes类型的数据用带b前缀的单引号或双引号表示:

    x = b'ABC'
  • bytes的每个字符都只占用一个字节。

  • #!/usr/bin/env python3
    # -*- coding: utf-8 -*-

        第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

        第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

        申明UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码:

3.3 使用list和tuple

  • Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
  • 要删除list末尾的元素,用pop()方法。
  • list里面的元素的数据类型也可以不同。
  • list元素也可以是另一个list。
  • 另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。
  • 不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
  • #list
    classmates = ['Michael', 'Bob', 'Tracy']
    #tuple
    classmates = ('Michael', 'Bob', 'Tracy')
    #只有1个元素的tuple,该元素为1
    tup = (1,)

    只有1个元素的tuple定义时必须加一个逗号,,来消除歧义.

  • tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

3.4 条件判断

  • 条件判断可以让计算机自己做选择。条件判断从上向下匹配,当满足条件时执行对应的块内语句,后续的elif和else都不再执行。

3.5 循环

  • break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用。
  • 不要滥用breakcontinue语句。breakcontinue会造成代码执行逻辑分叉过多,容易出错。

3.6 使用dict和set

  • Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
  • >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
    >>> d['Michael']
    95

       为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。

  • 要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:'Thomas' in d;二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
  • >>> d.get('Thomas')
    >>> d.get('Thomas', -1)
    -1
  • 请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。

    和list比较,dict有以下几个特点:

  • 查找和插入的速度极快,不会随着key的增加而变慢;
  • 需要占用大量的内存,内存浪费多。

      而list相反:

  • 查找和插入的时间随着元素的增加而增加;
  • 占用空间小,浪费内存很少。

在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key

  • set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
  • #dict初始化
    d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
    #set初始化
    s = set([1, 1, 2, 2, 3, 3])

    对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。 

    >>> a = 'abc'
    >>> a.replace('a', 'A')
    'Abc'
    >>> a
    'abc'

使用key-value存储结构的dict在Python中非常有用,选择不可变对象作为key很重要,最常用的key是字符串。

#tuple虽然是不变对象,但试试把(1, 2, 3)和(1, [2, 3])放入dict或set中,并解释结果
#dict初始化
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
#set初始化
s = set([1, 1, 2, 2, 3, 3])

d['test1']=(1,2,3)
d['test2']=(1,[2,3])  #添加元素成功

s.add((1,2,3))
s.add((1,[2,3]))  #TypeError: unhashable type: 'list'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值