【python】廖雪峰学习笔记

[廖雪峰python学习笔记]Python解释器学习网站https://www.liaoxuefeng.com/wiki/1016959663602400/python的好处可以做网站,很多著名的网站包括YouTube就是Python写的;可以做网络游戏的后台,很多在线游戏的后台都是Python开发的python不能做的写操作系统,这个只能用C语言写;写手机应用,只能用Swift/Objective-C(针对iPhone)和Java(针对Android);写3D游戏,最好用C或C++。pyth
摘要由CSDN通过智能技术生成

廖雪峰python学习笔记

学习网站https://www.liaoxuefeng.com/wiki/1016959663602400/

  • python的好处
    可以做网站,很多著名的网站包括YouTube就是Python写的;可以做网络游戏的后台,很多在线游戏的后台都是Python开发的
  • python不能做的
    写操作系统,这个只能用C语言写;写手机应用,只能用Swift/Objective-C(针对iPhone)和Java(针对Android);写3D游戏,最好用C或C++。
  • python的缺点
    运行速度慢;代码不能加密

Python解释器

  • CPython是用c语言开发的解释器,在命令行下运行python就是启动CPython解释器。
  • IPython是基于CPython之上的一个交互式解释器。
  • PyPy是另一个Python解释器,可以提高执行速度。
    还有Jython和IronPython

python 基础

输入输出

name = input()
name = input('please enter your name')
print('hello', name)

数据类型和变量

  • 整数:可以在数字中间以_分隔,写成10_000_000_000和10000000000一样
  • 交互式输入允许用'''...'''的格式表示多行内容;
  • r代表不将字符串里面的转义
  • 静态语言定义时必须指定类型比如java,而动态语言不需要指定类型比如python
  • 把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据。
  • a = ‘ABC’ :在内存中创建了一个’ABC’的字符串;在内存中创建了一个名为a的变量,并把它指向’ABC’。
    在这里插入图片描述

字符串和编码

  • ASCII编码是1个字节(8位),而Unicode编码通常是2个字节。

如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节,从而节省空间。由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes(bytes的每个字符都只占用一个字节)。x = b'ABC'

  • ord()函数获取一个字符的整数表示
  • chr()函数把编码转换为对应的字符
  • 以Unicode表示的str通过.encode(‘utf-8’)方法可以编码为指定的bytes,反之.decode(‘utf-8’,errors=‘ignore’)
  • 文件开头通常要写
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
  • 格式化方式
# % (%%代表转义的%)
>>>'Age: %s. Gender: %s' % (25, True)

# format()
>>>'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)

#f-string()
>>> r = 2.5
>>> s = 3.14 * r ** 2
>>> print(f'The area of a circle with radius {
     r} is {
     s:.2f}')

list和tuple

  • list 用[]初始化
    .append()
    .insert(1, ‘Jack’) 向索引1插入
    .pop()或者.pop(i)
    .sort()
  • tuple 用()初始化,不能修改元素的指向,比list更安全,但只有一个元素的时候应该加逗号(1,)

dict和set

  • dict
    in或者get(key)判断key在不在,pop(key)删除key
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
  • set
    list初始化,add(),remove()

del删除的是变量,而不是数据

函数

  • 函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量
  • 数据类型检查可以用内置函数isinstance()实现
if not isinstance(x, (int, float)):
	raise TypeError('bad operand type')
  • 返回多个值其实是返回一个tuple
  • 默认参数必须指向不变对象,比如说None
  • 可变参数: *nums表示把nums这个list的所有元素作为可变参数传进去
  • 关键字参数: **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。

高级特性

  • 只写[:]就可以原样复制一个list,浅拷贝
  • 循环的重点在于可迭代对象,通过collections模块的Iterable类型判断
>>> from collections import Iterable
>>> isinstance('abc', Iterable) 
True
>>> isinstance([1,2,3], Iterable)
True
>>> isinstance(123, Iterable)
False
# list、dict、str虽然是Iterable,却不是Iterator。
# 因为Iterator可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数。
>>> from collections.abc import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({
   }, Iterator)
False
>>> isinstance('abc', Iterator)
False
# 把list、dict、str等Iterable变成Iterator可以使用iter()函数
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True
  • 生成器: 在循环的过程中不断推算出后续的元素,不必创建完整的list,从而节省大量的空间,生成器也是可迭代对象
# 方法一:将列表生成器的[]改成(), 可以通过next(g)获得generator的下一个返回值,直到最后抛出StopIteration错误表示无法继续返回下一个值
# 但是一般不用next,直接通过for循环
>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>

# 方法二:如果一个函数定义中包含yield关键字,那么这个函数就不是普通函数,而是一个generator
# 变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b # print(b)就可以打印出b
        a, b = b, a + b
        n = n + 1
    return 'done'

# eg:杨辉三角
def triangles(max):
    n = 0
    L = [1] 
    while n < max:    #设置生成器
        yield L
        L = [L[i] + L[i + 1 ] for i in range(len(L) - 1 ) ]
        L.insert(0, 1)
        L.append(1
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值