17-7-24周总结(Python教程笔记)

来源:互联网 发布:mac怎么更新系统 编辑:程序博客网 时间:2024/06/07 00:10

1、Python简介

  Python是“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。(论程序员是如何度过圣诞节)
  C语言是可以用来编写操作系统的贴近硬件的语言,所以,C语言适合开发那些追求运行速度、充分发挥硬件性能的程序。而Python是用来编写应用程序的高级编程语言。Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写,直接使用现成的即可。
许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。龟叔给Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂。
Python缺点:
  运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢;而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。
  代码不能加密。如果要发布你的Python程序,实际上就是发布源代码,而C语言不用发布源代码,只需要把编译后的机器码(xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。

2、Python基础

  • 字符编码
      由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,通常在文件开头写上这两行:
#!/usr/bin/env python3# -*- coding: utf-8 -*-

  第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
  第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
  申明了UTF-8编码并不意味着.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码。

  • 使用list和tuple
      Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。用len()函数可以获得list元素的个数。用索引来访问list中每一个位置的元素,记得索引是从0开始的。当索引超出了范围时,Python会报一个IndexError错误。如果要取最后一个元素,可以用-1做索引。
      list是一个可变的有序表,所以,可以往list中追加元素到末尾。也可以把元素插入到指定的位置。要删除list末尾的元素,用pop()方法。要删除指定位置的元素,用pop(i)方法,其中i是索引位置。list里面的元素的数据类型也可以不同。
>>> classmates = ['Michael', 'Bob', 'Tracy']>>> classmates['Michael', 'Bob', 'Tracy']>>> classmates.append('Adam')>>> classmates['Michael', 'Bob', 'Tracy', 'Adam']>>> classmates.insert(1, 'Jack')>>> classmates['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']>>> classmates.pop()'Adam'>>> classmates['Michael', 'Jack', 'Bob', 'Tracy']

  另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,但不能赋值成另外的元素。因为tuple不可变,所以代码更安全。

  • 条件判断
if <条件判断1>:    <执行1>elif <条件判断2>:    <执行2>elif <条件判断3>:    <执行3>else:    <执行4>

input()读取用户的输入

s = input('birth: ')birth = int(s)if birth < 2000:    print('00前')else:    print('00后')
  • 循环
      Python的循环有两种,一种是for…in循环,依次把list或tuple中的每个元素迭代出来。Python提供一个range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。
sum = 0for x in range(101):    sum = sum + xprint(sum)

  第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。

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

  通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value。要删除一个key,用pop(key)方法,对应的value也会从dict中删除。
  和list比较,dict查找和插入的速度极快,不会随着key的增加而变慢,但需要占用大量的内存,内存浪费多。而list相反:查找和插入的时间随着元素的增加而增加,占用空间小,浪费内存很少。所以,dict是用空间来换取时间的一种方法。
  set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合,重复元素在set中自动被过滤。

>>> s = set([1, 1, 2, 2, 3, 3])>>> s{1, 2, 3}

  通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果。通过remove(key)方法可以删除元素。set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。
  set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象。

3、函数

  • 定义函数
      定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
def my_abs(x):    if x >= 0:        return x    else:        return -x
  • 函数的参数
      必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面);如何设置默认参数:当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。默认参数必须指向不变对象。
      把函数的参数改为可变参数,在参数前面加了一个*号。在函数内部,参数接收到的是一个tuple。调用该函数时,可以传入任意个参数,包括0个参数。
      关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。关键字参数可以扩展函数。
def person(name, age, **kw):    print('name:', name, 'age:', age, 'other:', kw)>>> extra = {'city': 'Beijing', 'job': 'Engineer'}>>> person('Jack', 24, **extra)name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

  函数person除了必选参数name和age外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数。**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
  如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。

def person(name, age, *, city, job):    print(name, age, city, job)

  和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符* ,*后面的参数被视为命名关键字参数。
  参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

  • 递归函数
def fact(n):    if n==1:        return 1    return n * fact(n - 1)

  解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。
  尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

4、高级特性

  • 切片
      Python提供了切片(Slice)操作符,取前3个元素:L[0:3]为从索引0开始取,直到索引3为止。

  • 迭代
      如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。

原创粉丝点击