-1 存在问题学习笔记
日期: 2021.10.5
-
不断调用函数会改变可变列表
5.3 节 传入可变参数。 一个错误!(还没理解清楚)
-
lambda函数的使用,本教程 reduce和map一节有涉及
-
函数调用会改变变量本身,这和很多语言是不同的
def normalize(name): for i in range(len(name)): name[i]=name[i].capitalize() # name[i]=name[i].title() return name L1 = ['adam', 'LISA', 'barT'] L=normalize(L1)-
本质上看是否使用了赋值语句,如果使用赋值语句,一般不会改变外部变量,注意(+=)
结合内存创建方法进行思考,如果没有使用赋值语句,仅仅是调用一个方法,因为函数参数传递的是一个引用,会在外部变量的基础上进行修改
相关资料参见 黑马基础教学视频
-
英文版 https://docs.python.org/3/
中文版本 https://docs.python.org/zh-cn/
1 Python简介- 创始人 龟叔 Guido
- 许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣
- 优点:Python就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写,直接使用现成的即可。除了内置的库外,Python还有大量的第三方库。
- 缺点 : 第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言 ; 第二个缺点就是代码不能加密
- 常用的python解释器
- Cpython – 官方下载自带的
- ipython – 增强式交互式解释器
- PyPy、Jython、IronPython等
- Python交互模式的代码是输入一行,执行一行,而命令行模式下直接运行.py文件是一次性执行该文件内的所有代码
- 交互式便于初学者学习
-
在Mac和Linux上可以像.exe文件那样直接运行.py文件,在Windows上不行。
-
通过which python3 命令查找python3 解释器的位置
-
( Sheban 添加该路径) 源文件中首行写
#!+路径名 -
更改执行权限
chmod a+x 文件名
-
命令行模式下直接运行 注意要 ” .文件名“ 而不是直接输入文件名
-
-
推荐使用VScode 而不去使用 word和记事本
-
word不是纯文本文件
-
记事本会自动添加 utf-8 BOM 出bug
https://blog.csdn.net/dawnredwood59/article/details/83380823
-
- print 遇到逗号“,”会输出一个空格
- input(“请输入")
-
整型、浮点型、布尔型
列表[ ]、元组()、字典{}
-
布尔型的运算有 and or not
-
Python的整数没有大小限制,而某些语言的整数根据其存储长度是有大小限制的,例如Java。
Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf(无限大)。
-
# 打多行 print('''line1 ... line2 ... line3''') -
变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错
-
取整除法 // 一般除法 /
- 理清ASCII / Unicode/ utf-8 的区别
- 计算机内部都是unicode 编码
- str 与 bytes 互相转换
- encode和decode的使用
# 第一行shebang # 第二行指明编码方式,需要编写 #!/usr/bin/env python3 # -*- coding: utf-8 -*-
-
格式化输出
- %d %f %x %s
- %4.2f 表示保留两位小数点,连上小数点在内至少4个字符宽度(如果整数部分较长,则以具体数字为主),不足时右对齐,左补空格
- %04.2f 不足时右对齐,左补0
- format 和 f-string
- list是一个有序的数据类型
- list的方法 len、append、insert、pop等等
- tuple是不可变的类型
- tuple的三种()、(1,)、(1,2,3),注意()是一个元组类型
- tuple内部如果有list,list的内容是可变的
- list 和tuple都支持从右或者从左边索引
- if -elif -else
- for while break continue 关键字的使用
- for 中常用的一个range函数,range(5): [0,1,2,3,4],range函数在不同的解释器中是不一样的
- list(range(4))将其转为列表格式
-
dict
- 无序的、查找速度快、占用内存较list大
- 初始化、增加值、更新值、查找值、判断是否存在(in或者get方法)、
- dict的key必须是不可变对象 ,通过哈希算法(Hash)算得 key对应的value存储位置的。
-
set
- set和dict类似,也是一组key的集合 ,唯一区别仅在于没有存储对应的value。不可以放入可变对象,不可以重复(会自动过滤)
- 两个set可以做数学意义上的交集、并集等操作
-
ipython 或者python 中 help(函数名)
-
ipython 变量名+tab可以看到可以调用的函数
spyder中可以在ipython console中操作!
或者查看ipython的官方文档!
pycharm 可以用 control +Q
-
把my_abs()的函数定义保存为abstest.py文件,可以用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名不含.py扩展名
-
想定义空函数,可以用Pass关键字
-
可以返回多个返回值,返回的值是一个tuple
一个tuple可以省略小括号比如a,b=b,a 可以交换
-
传入多个参数
- 默认参数: 必选参数在前,默认参数在后
- 多个默认参数: 多个默认参数时,调用的时候,既可以按顺序提供默认参数 ; 也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。
-
传入可变参数。 一个错误!(还没理解清楚)
默认参数必须指向不变对象!否则默认参数会不断变化
-
可变参数 ,传入list或tuple 用*表示
-
关键字参数,传入dict,用**表示
-
命名关键字参数
-
必选参数 、 默认参数 、可变参数、命名关键字参数、可变参数的组合
-
存在栈溢出问题
-
尾递归调用可以解决,但是Python并没有优化
def fact(n): if n==1: return 1 return n * fact(n - 1)尾递归改写:
def fact_iter(num, product): if num == 1: return product return fact_iter(num - 1, num * product)
- 可以从右往左、从左往右、跳跃切片
- 可以通过 for 进行叠代遍历
- 可以遍历 list tuple dict 等
- 通过collections.abc模块的Iterable类型判断 是否可以迭代
- for 和range 或者enumerate搭配可以使用索引进行遍历
-
[x * x for x in range(1, 11) if x % 2 == 0]
-
和if -else 连用
-
嵌套for 循环
- generator 创建方法
- 只要把一个列表生成式的[]改成()
- yield函数 循环的过程中不断推算出后续,不必创建完整的list
- 凡是可作用于for循环的对象都是Iterable类型;
- 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列
- 所谓惰性,指的是只有在需要返回下一个数据时它才会计算
- 集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
- Python的for循环本质上就是通过不断调用next()函数实现的
- 函数本身可以赋给变量
- 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数 , 这种函数就称之为高阶函数
-
map 使得函数更加简洁
-
注意map返回结果是一个Iterator,Iterator是惰性序列
-
reduce把结果继续和序列的下一个元素做累积计算



