【笔记】Python学习(二)

版权声明:欢迎评论交流,转载请注明原作者。 https://blog.csdn.net/m0_37809890/article/details/86342783

前言

  1. 参考资料
    Python教程——廖雪峰的官方网站
  2. 我佛了,上个教程是真的混乱,要不是我有其他语言基础,真的就被搞蒙了。
  3. 重新跟着廖老师走一遍

第一个Python程序

  1. 使用exit()退出python
  2. 提示符会把每一行的结果都打印出来,而直接运行整个程序则不会
  3. 基础输入:input(),可以传入一个字符串表示提示信息,返回值是string类型

Python基础

  1. 当语句以冒号结尾时,缩进的语句视为一个代码块

数据类型和变量

  1. 有一种特殊的空值None

字符串和编码

  1. ASCII编码固定一个字节。Unicode编码通常2个字节且包含了各国语言。UTF-8编码不等长,为1-6个字节,且包含了所有ASCII编码
  2. Python2需要考虑编码问题,最好统一为utf-8编码。Python3全部使用unicode编码,不用考虑转码问题
  3. 格式化输出字符串print('%3.1f%%' % r)

dict和set

  1. get(p1,p2=None)方法,返回键p1的值,如果不存在,返回p2

函数

定义函数

	def func_name(args):
		statement
  1. 如果没有return语句,默认返回None
  2. 多返回值实际上是一个tuple

函数参数

位置参数

  1. 定义def foo(x)
  2. 调用foo(x)

默认参数

  1. 定义def foo(a,b=2,c=3)
  2. 调用foo(1); foo(1,2); foo(1,2,3)
  3. 可以在调用时指定参数赋值 foo(1,c=3)
  4. 默认参数必须指定不变对象,如None!

可变参数

  1. 参数名字前面加*,会把接收的元素认为是一个list或tuple,想要传递list时,在前面加*即可。
  2. 定义def foo(*numbers)
  3. 调用foo(1); foo(1,2,3)
  4. 调用foo(*list)

关键字参数

  1. 关键字参数:参数名字前面加**,会把接收的参数认为是一个dict,可以扩展函数功能。用类似于定义字典的方法去传参,或者传入**dict
  2. 定义def foo(a,**kw)
  3. 调用foo(1)
  4. 调用foo(1, a=3, b=4)
  5. 调用foo(1, **dict)

命名关键字参数

  1. 参数必须给出名字传递,需要用*分隔位置参数与命名关键字参数
  2. 定义def foo(a, *, b, c)
  3. 调用foo(1,b=3,c=2)
  4. 调用foo(1,c=2,b=3)
  5. 可以给命名关键字参数赋默认值
  6. 如果有一个可变参数,就不用*分隔了

参数组合

  1. 排列顺序:必选参数-默认参数-可变参数-命名关键字参数-关键字参数
  2. def bar(a, c=0, *args, arg1,**kw)
  3. 不要瞎组合,谢谢

递归函数

栈似乎只有不到1000层

高级特性

  1. 用一行完成多行的事情
  2. range(start,stop,step)

切片

Seq[start,stop,step]
手写trim函数:

def trim(s):
	st, ed, start = 0, 0, 1;
	for i in range(len(s)):
		if(s[i]!=' '):
			ed = i+1;
			if(start): st = i; start = 0;
	return s[st:ed];

迭代

  1. 给定一个序列,用for循环来遍历它的过程称为迭代
  2. 检测是否可以迭代:
    from collections import Iterable
    	isinstance('abc',Iterable)
    

列表生成式

  1. 列表生成式List Comprehensions,快速方便地创建List
  2. 语法[x for x in range(1,11)],要生成的元素放到前面,for循环放到后面。
  3. 后面可以带语句,前面可以带表达式,非常方便。

生成器Generator

  1. 不把列表元素全部提前生成,而是一边循环一边计算
  2. 语法与列表生成式基本相同,但外部是小括号 g=(x for x in range(1,11))
  3. 每次调用next(g)获取下一个元素
  4. generator可以用for迭代
  5. 把函数的一个调用写成生成器:写yield语句,后跟要生成的值。每次调用next时执行到yield就停止,返回这个值
 def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'
  1. 通过捕获异常来获得返回值
  2. 生成杨辉三角形的生成器
def triangles():
	lst = []
	while 1:
		ppt = lst + [1]
		for i in range(1,len(lst)):
			ppt[i] += lst[i-1]
		lst = ppt
		yield lst

迭代器

  1. 凡是可作用于for循环的对象都是Iterable类型
  2. 反是可作用于next()函数的对象都是Iterator类型,表示一个惰性计算的序列
  3. 集合等都是Iterable而不是Iterator,可以通过iter()来获得Iterator对象
  4. for循环本质是不断next()

猜你喜欢

转载自blog.csdn.net/m0_37809890/article/details/86342783