admin管理员组

文章数量:1794759

Python学习日记(初级篇01基础语法)——黑马程序员视频学习笔记

Python学习日记(初级篇01基础语法)——黑马程序员视频学习笔记

Python基础语法
  • 一、开发环境
    • 1.1虚拟机安装与设置
    • 1.2Linux命令
      • 1.2.1远程管理中的scp(secure copy)用于远程拷贝文件
      • 1.2.2用户权限(概念了解)
      • 1.2.3用户管理
      • 1.2.4切换用户
      • 1.2.5修改文件权限
      • 1.2.6系统信相关命令
      • 1.2.7软件安装和压缩
    • 1.3Python语言与PyCharm
      • 1.3.1解释器
      • 1.3.2Python特点
      • 1.3.3第一个Python程序
      • 1.3.4PyCharm的初始设置
      • 1.3.5新建项目
      • 1.3.6多文件项目的演练
  • 二、数据类型与运算符
    • 2.1算数运算符
    • 2.2比较运算符
    • 2.3逻辑运算符
    • 2.4赋值运算符
    • 2.5数据类型
    • 2.6转义字符
  • 三、if语句
  • 四、循环
    • 4.1while循环
    • 4.2完整的for循环语法
    • 4.3break和continue
  • 五、函数基础
    • 5.1定义函数的格式如下:
    • 5.2使用模块中的函数
    • 5.3基础函数
  • 六、公共方法
    • 6.1Python的内置函数
    • 6.2切片
    • 6.3运算符
  • 七、函数提高
    • 7.1变量作用域
    • 7.2多函数程序执行流程
    • 7.3函数的返回值
    • 7.4函数的参数
      • 7.4.1位置参数
      • 7.4.2关键字参数
      • 7.4.3缺省参数
      • 7.4.4不定长参数
    • 7.5拆包与交换变量值
    • 7.6引用
      • 7.6.1了解引用
      • 7.6.2引用当做实参
    • 7.7可变类型与不可变类型
  • 八、递归函数
  • 九、匿名函数(lambda表达式)
  • 十、高阶函数与内置函数
    • 10.1高阶函数
      • 10.1.1体验高阶函数
    • 10.2内置高阶函数
      • 10.2.1map()
      • 10.2.2reduce()
      • 10.2.3filter()
  • 十一、文件操作
    • 11.1文件操作的作用
    • 11.2文件的基本操作
      • 11.2.1打开
      • 11.2.2读
      • 11.2.3seek()用以移动文件指针
    • 11.3文件备份
    • 11.4文件和文件夹的操作
      • 11.4.1文件的重命名与删除
      • 11.4.2文件夹与目录
      • 11.4.3批量重命名

  • 参考黑马程序员的免费教程。Python基础教程下载【黑马程序员完整版】
一、开发环境 1.1虚拟机安装与设置
  • 首先需要两个准备,第一个准备是在计算机上安装VMware虚拟机软件,下载地址:VMware官网,正常安装即可;

  • 第二个准备是在Ubantu官网下载Ubantu。安装完成时遇到两个问题,<1>配置完成后启动虚拟机,显示“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态。”解决方案参照【此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态。(如何进入系统BIOS设定)】。<2>虚拟机无法联网,解决方案参照【虚拟机(Ubantu)无法联网】。

  • 具体安装按窗口提示即可,以下是相关的设置。

设置内容设置方法
语言环境依次点击Settings>>Region&Language>>Manage Installed Languages>>Install/Remove Languages…>>勾选Chinese(simplified)>>Language选择或者拖动为Chinese>>Restart…
设置服务器镜像源(提高软件安装/更新速度)系统设置>>关于>>软件更新>>下载自>>其他站点>>选择最佳服务器(S)>>选择服务器(S)
启动栏添加终端图标找到后右键选择添加到收藏夹
使用apt更新和升级系统软件1.sudo apt install 软件名 //安装软件 2.sudo apt remove 软件名//卸载软件 3.sudo apt update/upgrade//可软件软件列表/更新已安装的软件
安装常用工具1.Python程序员:$ sudo apt install ipython $ sudo apt install ipython3 $ sudo apt install python-pip $ sudo apt install python3-pip 2.安装ssh服务器:$ sudo apt install openssh-server
删除软件$ sudo apt remove 软件
deb安装格式$ sudo dpkg -i <package.deb>
1.2Linux命令

Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Linux命令内容命令
文件和目录命令ls,cd,touch,mkdir,rm
拷贝和移动命令tree,cp,mv
文件内容命令cat,more,grep
远程管理命令ifconfig,ping,SSH的工作方式简介以及ssh命令
用户权限及用户管理命令chmod,chgrp,useradd,passwd,userdel
软件安装及压缩命令apt简介及命令,tar,gzip压缩命令,bzip2压缩命令
vim的基本使用
1.2.1远程管理中的scp(secure copy)用于远程拷贝文件 # 把本地当前目录下的01.py文件复制到远程家目录下的Desktop/01.py scp -P port 01.py user@remote:Desktop/01.py # 把远程家目录下的Desktop/01.py文件复制到本地当前目录下的01.py scp -P port user@remote:Desktop/01.py 01.py # 加上 -r 选项可以传送文件夹 # 把当前目录下的demo文件夹复制到远程家目录下的Desktop scp -r demo user@remote:Desktop # 把远程家目录下的Desktop复制到当前目录下的demo文件夹 scp -r user@remote:Desktop demo 选项含义
-r源文件为目录文件,scp将递归复制目录下的所有子目录和文件
-P若远程SSH服务器的端口不是22,需要使用大写字母-P选项指定端口
1.2.2用户权限(概念了解)
  • 对文件/目录的的权限包括:
序号权限英文缩写数字代号(二进制)
01readr4
02writew2
03执行excutex1
  • 预先对组设置好权限,再将对应的用户添加进去,从而依次为每一个用户设置权限。 ls -l显示的文件详细信:目录-拥有者权限-组权限-其他用户权限-硬链接数-拥有者-组-大小-时间-文件或目录名称。其中硬链接数表示有多少种方式可以访问到当前目录/文件。
  • chmod修改用户/组对文件/目录的权限。
chmod +/-rwx 文件名/目录名
  • 超级用户 Linux系统中的root账号用于系统的维护和管理,对操作细听的所有资源具有所有访问权限。
  • 组管理终端命令 创建/删除组的终端命令都需要sudo执行。
序号命令作用
01groupadd 组名添加组
02groupdel 组名删除组
03cat /etc/group确认组信(配置文件)
04chgrp 组名 文件/目录名递归修改文件/目录的所属组
1.2.3用户管理 序号命令作用说明
01useradd -m -g 组 新建用户名创建用户-m:自动建立用户家目录;-g:指定用户所在组,否则会建立与用户同名的组
02passwd 用户名设置密码普通用户可直接使用修改自己的账户密码
03userdel -r 用户名删除用户-r选项会自动删除用户家目录
04cat /etc/passwd | grep 用户名确认用户信新建的用户信存储在/etc/passwd文件中
  • 查看用户信
序号命令作用
01id [用户名]查看用户UID和GID信
02who查看当前所有登录的用户列表
03whoami查看当前登录用户的账户名
  • passwd文件 /etc/passwd文件存放的是用户的信,由六个分号组成的7个信,分别是 用户名;密码(x表示已加密);UID(用户标识);GID(组标识);用户全名或者本地账号;家目录;登录使用的Shell(登陆之后使用的终端命令,Ubantu默认是dash)
  • usermod usermod可以用以设置用户的主组/附加组合登录Shell。 主组:在新建用户的时候指定,在/etc/passwd的第四列GID对应的组。 附加组:在/etc/group中最后一列表示该组的用户列表,用于指定用户的附加权限。
# 修改用户的主组(passwd中的GID) usermod -g 组 用户名 # 修改用户的附加组 (重新登录才生效) usermod -G 组 用户名 # 修改用户登录Shell usermod -s /bin/bash 用户名 # 默认useradd添加的用户无权限使用sudo以root身份执行命令 # 使用下述命令句将用户添加到sudo附加组中 usermod -G sudo 用户名 1.2.4切换用户 序号命令作用说明
01su - 用户名切换用户并切换目录-可以切换到用户家目录,否则保持位置不变
02exit退出当前登录用户
  • su不接用户名,可以切换到root,但是不推荐使用,因为不安全。
  • exit示意图如下:
1.2.5修改文件权限 序号命令作用
01chown修改拥有者
02chgrp修改组
03chmod修改权限
  • 命令格式
# 修改文件/目录拥有者 $ chown 用户名 文件名/目录名 # 递归修改文件/目录的组 $ chgrp -R 组名 文件名/目录名 # 递归修改文件权限(数字:二进制) $ chmod -R 755 文件名/目录名 # 直接修改文件/目录的 读/写/执行 权限,但是不能精确到拥有者/组/其他用户 $ chmod +/- rwx 文件名/目录名
  • 文件权限用二进制表示
拥有者组其他
r ;w;xr;w;xr;w;x
4;2;14;2;14;2;1
1.2.6系统信相关命令 序号命令作用
01date查看系统时间
02calcalendar查看日历,-y选项显示一年的日历
03df -hdisk free显示磁盘剩余空间
04du -h [目录名]disk usage显示目录下的文件大小
05ps auxprocess status查看进程的详细情况 (选项含义在下个表格中介绍)
06top动态显示运行中的进程并排序 ,输入q退出top
07kill [-9] 进程代号终止指定代号(PID)的进程,-9表示强行终止
08find [路径] -name “*.py”查找指定路径下所有扩展名为-py的文件
09ln -s 被链接的源文件 链接文件建立文件的软链接(快捷方式) —注意不带-s选项建立的是硬链接,会很占空间;源文件要用绝对路径
  • -h选项的作用:更人性化地显示信(计量单位)
  • ps选项说明
选项含义
a显示终端所有进程(包括其他用户)
u显示进程的详细状态
x显示没有控制终端的进程
1.2.7软件安装和压缩 序号命令作用
01tar(打包)1打包文件 tar -cvf 打包文件.tar 被打包的文件/路径...;2解包文件tar -xvf 打包文件.tar
02gzip(压缩)1压缩文件 tar -zcvf 打包文件.tar.gz 被打包的文件/路径...;2解压缩文件tar -zxvf 打包文件.tar.gz ;3解压缩到指定路径tar -zxvf 打包文件.tar.gz -C 目标路径
03bzip21压缩文件 tar -jcvf 打包文件.tar.bz2 被打包的文件/路径...;2解压缩文件tar -jxvf 打包文件.tar.bz2 ; 3解压缩到指定路径tar -jxvf 打包文件.tar.bz2 -C 目标路径
04apt1安装软件sudo apt install 软件包 ;2卸载软件sudo apt remove 软件名;3更新已安装的包sudo apt upgrate
  • tar选项说明
选项含义
c生成档案文件,创建打包文件
x解开档案文件
v列出归档归档解档的详细过程,显示进度
f指定档案文件名称,f后面一定是.tar 文件,所以必须放在选项最后
  • apt
# 一个小火车提示 $ sudo apt install sl # 一个比较漂亮的查看当前进程排名的软件 $ sudo apt install htop
  • 软件源参考前面1.1虚拟机安装与设置
1.3Python语言与PyCharm 1.3.1解释器
  • 编译器:将其他语言翻译成机器语言的工具。
  • 当编译器以解释方式运行的时候,也称为解释器。
  • 编译型语言(C、C++)执行速度快,但跨平台性差。
  • 解释性语言(Java、Python等)跨平台性好,执行速度稍逊。
1.3.2Python特点
  • 完全面向对象
  • 拥有一个强大的标准库
  • Python社区提供了大量的第三方模块
1.3.3第一个Python程序
  • 解释器—python/python3
  • 交互式—ipython/ipython3
  • 集成开发环境(IDE)—PyCharm
$ cd Destop/ $ touch 01-HelloPython.py $ gedit 01-HelloPython.py # 编辑完Python代码后,用解释器执行 $ python3 01-HelloPython.py
  • print函数的作用,类似于C++中的cout
print("Hello Python") print("Hello World") 1.3.4PyCharm的初始设置
  • 安装PyCharm(Linux系统下)
# 1.Linux系统下,解压下载后的安装包 $ tar -zxvf pycharm-community-2021.3.2.tar.gz # 2.将解压缩的目录移动到“/opt”目录下,可以方便其他用户的使用 $ sudo mv pycharm-community-2021.3.2/ /opt/ # 3.启动PyCharm $ /opt/pycharm-community-2021.3.2/bin/pycharm.sh # Linux系统下恢复PyCharm的初始设置:关闭PyCharm后,执行 $ rm -r ~/.PyCharm2021.3
  • 卸载PyCharm(Linux系统下)
# 1.删除压缩目录 $ sudo rm -r /opt/pycharm-community-2021.3.2/ # 2.删除家目录下用于保存配置信的隐藏目录 $ rm -r ~/.PyCharm2021.3/ # 3.如果不再使用PyCharm,还要删除/usr/share/applications/下的 # jetbrains-pycharm.desktop。(删除软链接——快捷方式) 1.3.5新建项目
  • 命名文件名建议使用小写字母、数字和下划线
  • 文件名不能以数字开始
  • 通过欢迎界面或者菜单File>>New Project可以新建项目
  • 命名规则,摘自Python风格指南(Google)。

模块名写法: module_name ; 包名写法: package_name ; 类名: ClassName ; 方法名:method_name ; 异常名: ExceptionName ; 函数名: function_name ; 全局常量名:GLOBAL_CONSTANT_NAME ; 全局变量名: global_var_name ; 实例名:instance_var_name ; 函数参数名: function_parameter_name ; 局部变量名: local_var_name . 函数名,变量名和文件名应该是描述性的,尽量避免缩写,特别要避免使用非项目人员不清楚难以理解的缩写,不要通过删除单词中的字母来进行缩写。始终使用.py 作为文件后缀名,不要用破折号。

1.3.6多文件项目的演练
  • 开发项目就是开发一个专门解决一个复杂业务功能的软件
  • 通常每个项目就具有一个独立专属的目录,用于保存所有和项目相关的文件
  • 一个项目通常含有很多源文件
二、数据类型与运算符 2.1算数运算符
  • 算数运算符+,-,*,/,//,%,**。
  • 其中*还可以计算出字符串重复指定次数的结果。
  • 优先级同C++(由高到低排列)
运算符描述
**幂(最高优先级)
* / % //乘、除、取余数、取整数
+ -加法、减法
2.2比较运算符

与C++类似:==,!=,>,<,>=,<=

2.3逻辑运算符
  • and
  • or
  • not
2.4赋值运算符

=,+=,-=,*=,/=,//=,%=,**=

2.5数据类型
  • 数据类型:数字型与非数字型
  • 数字型:整型(int)、浮点型(float)、布尔型(bool)、复数型(complex)
  • 非数字型:字符串、列表、元组、字典
  • 在Python中,所有非数字型变量都支持一下特点 1.都是一个序列sequence,也可以理解为容器 2.取值[] 3.遍历for in 4.计算长度、最大/最小值、比较、删除 5.链接+和重复* 6.切片

  • <1>列表是Python中使用最频繁的数据类型,在C++中可类比为数组 应用场景:列表一般都存储相同类型的数据;通过迭代遍历,在循环体内部针对列表元素执行相同操作
# 列表变量name_list name_list = ["zhangsan", "lisi", "wangwu"] # 循环遍历,每次循环变量都会保存在name变量中 for name in name_list: 循环内部针对列表元素的操作 print(name) 序号分类关键字/函数/方法说明
01增加列表.insert(索引,数据)在指定位置插入数据
列表.append(数据)在末尾追加数据
列表.extend(列表2)将列表2的数据追加到列表
02修改列表[索引] = 数据修改指定索引的数据
03删除del 列表[索引]删除指定索引的数据
列表.remove[数据]删除第一个出现的指定数据
列表.pop删除末尾数据
列表.pop(索引)删除指定索引数据
列表.clear清空列表
04统计len(列表)列表长度
列表.count(数据)数据在列表中出现的次数
05排序列表.sort()升序
列表.sort(reverse=True)降序
列表.reverse()逆序、反转

  • <2>元组(Tuple)与列表类似,但是元组的元素不能修改,且用()定义
info_tuple = ("zhangsan", 18, 1.75) # 创建空元组 empty_tuple = () # 元组中只有一个元素时必须在元素后添加逗号,否则即是一个int变量的定义 single_tuple = (5, ) # 迭代遍历 for my_info in info_tuple: print(my_info) # 元组与列表转换 list(元组) tuple(列表)
  • <3>字典(dictionary)是无序的对象集合,用{}定义,与C++中的结构体有异曲同工之妙 键key是索引,只能使用字符串、数字或元组; 值value是数据,可以取任何数据; ==len(字典)==获取字典的键值对数量。
xiaoming_dict = {"name": "小明", "age": 18, "gender": True "height": 1.75 "weight": 55} print(xiaoming_dict) tiny_dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} del tiny_dict['Name'] # 删除键 'Name' tiny_dict.clear() # 清空字典 tiny_dict.update(xiaoming_dict) #合并字典,优先使用新字典键值 del tiny_dict # 删除字典 2.6转义字符 转义字符描述
\\反斜杠
单引号
"双引号
\\n换行
\\t横向制表符,垂直方向对齐
\\r回车
三、if语句 # if与elif if 条件1: 条件1成立时,要做的事情 ... elif 条件2: 条件2成立时,要做的事情 ... else: 以上条件都不满足执行的代码 ... # if的嵌套 if 条件1: 条件1成立时,要做的事情 ... if 条件1基础上的条件2: 条件2成立时,要做的事情 ... else: 条件1不成立时,要做的事情 ...
  • 注意:在Python开发中,Tab和空格不要混用!代码的缩进建议使用4个空格。
四、循环

三大流程方式:顺序、分支、循环

4.1while循环 # while 循环 i = 0 # 计数器(程序计数法常从零开始) while i < 5: # 条件 print("Hello Python") i += 1
4.2完整的for循环语法 for 变量 in 集合: 循环体代码 else: 没有通过 break 退出循环,循环结束后,会执行的代码 4.3break和continue
  • break某一条件满足时,退出循环,不再执行后续重复的代码。
  • continue某一条件满足时,不执行后续重复的代码,使用的时候注意计数器是否变化,以避免出现死循环。

break和continue只对当前所在循环有效

五、函数基础 5.1定义函数的格式如下: # 这里下方要空两行 def 函数名(): """函数说明""" # 在调用出 CtroL + Q 可以查询函数说明 函数封装的代码 ...... def sum_2_sum(num1, num2): # num1、num2为形参 """俩数求和""" return num1 + num2 # 返回值 result = sum_2_sum(10, 40) # 此处10与40为实参 print("输出结果为%d" % result) 5.2使用模块中的函数

模块是Python程序架构的一个核心概念

  • pyc文件是由Python解释器将模块的源码转换为字节码,作为一种启动速度的优化
5.3基础函数 # 1.将x输出到控制台 print(x) print("格式化字符串" % 变量1) print("格式化字符串" % (变量1, 变量2, 变量3, ...)) print("*", end="") # 下次输出不换行 print("") # 换行 # 2.查看x的变量类型 type(x) # 3.键盘输入的都是字符串类型 number_string = input("请输入数据:") # 4.类型准换 number_int = int(number_string) number_float = float(number_string) # 5.随机数的处理 import random # 导入随机数模块 random.randint(10, 20) # 生成随机数n:10 <= n <= 20

补充:

  • 变量的格式化输出(包含%的字符串被称为格式化字符串)
# 语法格式如下 print("格式化字符串" % 变量1) print("格式化字符串" % (变量1, 变量2, 变量3, ...)) 格式化字符含义
%s字符串
%d有符号十进制整数, %06d表示输出的整数显示位数,不足的用0补全
%f浮点数, %.2f表示小数点后保留位数
%%输出%
六、公共方法 6.1Python的内置函数

Python包含了一下内置函数:

函数描述备注
len(item)计算容器中元素个数
del(item)删除变量del有两种方式
max(item)返回容器中元素最大值字典只比较key
min(item)返回容器中元素最小值字典只比较key
cmp(item1, item2)比较两个值,-1 小于/0 相等/1 大于Python3.x取消了该函数
6.2切片 描述Python表达式结果支持的数据类型
切片“0123456789” [::-2]“97531”字符串、列表、元组
6.3运算符 运算符Python运算符结果描述支持的数据类型
+[1, 2] + [3, 4][1, 2, 3, 4]合并字符串、列表、元组
*[“Hi”] * 4[“Hi”, “Hi”, “Hi”, “Hi”]重复字符串、列表、元组
in3 in (1, 2, 3)True元素是否存在字符串、列表、元组、字典
not in4 not in (1, 2, 3)True元素是否不存在字符串、列表、元组 、字典
> >= == < <=(1, 2, 3) < (2, 2, 3)True元素比较字符串、列表、元组
七、函数提高 7.1变量作用域

局部变量和全局变量

  • 局部变量,就是在函数内部定义的变量。当函数调用时,局部变量被创建,当函数调用完成后这个变量立即销毁。
  • 在函数外边定义的变量叫做全局变量,全局变量能够在所有的函数中进行访问。
# 函数体内部修改全局变量 a = 100 def test(): # global 关键字声明 a 是全局变量 global a a = 200 print(a) print(a) 7.2多函数程序执行流程

一般在实际开发过程中,一个程序往往由多个函数(后面知识中会讲解类)组成,并且多个函数共享某些数据,这种场景是经常出现的,因此下面来总结下,多个函数中共享数据的几种方式。

  • 使用全局变量
  • 使用函数的返回值、参数
  • 函数嵌套调用
  • 7.3函数的返回值
    • 如果return后面有多个数据,那么默认是元组
    def divid(a, b): shang = a//b yushu = a%b return shang, yushu #默认是元组 result = divid(5, 2) print(result) # 输出(2, 1)
    • return后面可以是元组,列表、字典等,只要是能够存储多个数据的类型,就可以一次性返回多个数
    def function(): # return [1, 2, 3] # return (1, 2, 3) return {"num1": 1, "num2": 2, "num3": 3} 7.4函数的参数 7.4.1位置参数 def usr_info(name, age, gender): print("%s:年龄%d;性别%s" % (name, age, gender)) usr_info("小明", 18, "男") 7.4.2关键字参数
    • 函数调用,通过“键=值”的形式加以指定,清除了关键字参数的顺序要求。
    def usr_info(name, age, gender): print("%s:年龄%d;性别%s" % (name, age, gender)) usr_info("小明", 18, "男") usr_info("小明", gender="男", age=18) # 注意位置参数要在关键字参数之前 7.4.3缺省参数
    • 调用函数时,缺省参数的值如果没有传入,则取默认值。
    • 注意:带有默认值的参数一定要位于参数列表的最后面
    def printinfo(name, age=35, gender="男"): # 打印任何传入的字符串 print("name: %s" % name) print("age %d" % age) print("name: %s" % gender) # 调用printinfo函数 printinfo(name="miki") # 在函数执行过程中 age取默认值35, gender取“男” printinfo(age=9 ,name="miki", gender="女") 7.4.4不定长参数
    • 加了星号 * 的变量args会存放所有未命名的变量参数,args为元组

    • 而加 ** 的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典.

    • 注意:如果很多个值都是不定长参数,那么这种情况下,可以将缺省参数放到 *args的后面, 但如果有**kwargs的话,**kwargs必须是最后的

    7.5拆包与交换变量值
    • 拆包元组
    def get_my_info(): high = 178 weight = 100 age = 18 return high, weight, age # result = get_my_info() # print(result) my_high, my_weight, my_age = get_my_info() print(my_high) print(my_weight) print(my_age)
    • 拆包字典
    def get_info(): return{"name":"xiaoming", "age":22} a, b = get_info() print(get_info()[a]) print(get_info()[b])
    • 交换变量值
    # 第 1 种方式 # a = 4 # b = 5 # c = 0 # # c = a # a = b # b = c # # print(a) # print(b) # 第 2 种方式 # a = 4 # b = 5 # a = a+b # a=9, b=5 # b = a-b # a=9, b=4 # a = a-b # a=5, b=4 # print(a) # print(b) # 第 3 种方式 a, b = 4, 5 a, b = b, a print(a) print(b) 7.6引用 7.6.1了解引用
    • 在python中,值是靠引用来传递来的。

    • 我们可以用id()来判断两个变量是否为同一个值的引用。 我们可以将id值理解为那块内存的地址标示。

    7.6.2引用当做实参 def test1(b): # 变量b一定是一个局部变量,就看它指向的是谁?可变还是不可变 b += b # 地址(id(b))改变 print(id(b)) # b = b+b # xx = xx+yyy 先把=号右边的结果计算出来,然后让b指向这个新的地方, # 不管原来b指向谁,现在b一定指向这个新的地方 # a = [11, 22] a = 100 print(f"a的原始地址是id(a)") test1(a) print(a) 7.7可变类型与不可变类型
    • 所谓可变类型与不可变类型是指:数据能够直接进行修改,如果能直接修改那么就是可变,否则是不可变。
    • 可变类型有: 列表、字典、集合。
    • 不可变类型有: 数字、字符串、元组。
    八、递归函数
    • 应用场景
  • 遍历文件夹下所有文件;
  • 算法课程,例如:快速排序。
    • 递归的特点 (☆☆☆☆☆) – 函数内部自己调用自己 – 必须有出口
    # 整数以内所有正整数的和 def num_summer(num): if num == 1: return num return num + num_summer(num - 1) print(num_summer(6)) 九、匿名函数(lambda表达式)
    • 函数可以做为参数传递给另外一个函数, 可以使得函数的实现更加通用
    • 匿名函数也可以作为参数传递给另外一个函数, 对于只需要用到一次函数, 可以通过匿名函数减少代码量
    # 带判断的lambda my_function = lambda a, b: a + b if a == b else b print(my_function(5, 6)) # 同此,且不会引起PYCharm的波浪号规范建议 print((lambda a, b: a + b)(6, 5)) def my_function(func): a = 100 b = 200 # 把 cucalate_rule 当做函数来调用 result = func(a, b) print('result:', result) my_function(lambda a, b: a / b) my_function(lambda a, b: a // b) my_function(lambda a, b: a % b) # 可变参数*args与关键字参数**kwargs fn1 = lambda *args: args print(fn1(10, 20, 30)) fn2 = lambda **kwargs: kwargs print(fn2(name="Python", age=20))
    • 使用匿名函数进行列表内字典排序
    students = [ {'name': 'Tom', 'age': 18}, {'name': 'Jerry', 'age': 20}, {'name': 'Tack', 'age': 19} ] print(students) students.sort(key=lambda x: x['age']) print(students) 十、高阶函数与内置函数 10.1高阶函数
    • 把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指着种高度抽象的编程范式,减少了代码的重复,开发速度较快。
    10.1.1体验高阶函数 # 求绝对值 abs(-10) # 10 # 四舍五入 round(1.2) # 1 round(1.9) # 2 def sum_num(a, b, f): return f(a) + f(b) result = sum_num(-9, 4, abs) print(result) 10.2内置高阶函数 10.2.1map()
    • map(func, lst),将传入的func作用到lst变量的每个元素中,并将结果组成新的列表(Python2)或者“迭代器(Python3)”返回。
    # 计算列表中各个数字的平方 def func(x): return x ** 2 num_list = [1, 2, 3, 4, 5] result = map(func, num_list) print(result) # <map object at 0x000001F168A8FFA0> print(list(result)) # [1, 4, 9, 16, 25] 10.2.2reduce()
    • reduce(func, lst),其中func必须有两个参数。每次 func计算的结果继续和序列的下一个元素做累积计算(个人理解:即将lst中的所有数字都做了func计算)。

    注意:reduce()传入的参数func必须接收2个参数。

    # 计算列表中各个数字的累加和。 import functools def func1(x, y): return x + y num_list1 = [1, 2, 3, 4, 5] result1 = functools.reduce(func1, num_list1) print(result1) 10.2.3filter()
    • filter(func, lst)函数用铝过滤序列,过滤掉不符合条件的元素,返回一个filter对象。可以用list()转为列表。
    def func2(a): return a % 2 == 0 num_list2 = [] for x in range(1, 11): num_list2.append(x) result2 = filter(func2, num_list2) print(result2) # <filter object at 0x000001D316BA1E50> print(list(result2)) # [2, 4, 6, 8, 10] 十一、文件操作 11.1文件操作的作用
    • 就是把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。
    11.2文件的基本操作 11.2.1打开 file = open(name, mode) # file 是一个对象,与C++相似
    • name:是要打开的目标文件名的字符串(可包含文件所在具体路径)
    • mode:设置打开文件的访问模式:只读、写入、追加等等
    11.2.2读
    • read()
    # 文件对象.read(num) num表示读取的字节长度,若不写则默认全部读取 test_txt_file = open('test.txt', 'r') print(test_txt_file.read()) test_txt_file.close()
    • readlines() 该方法下读取文件所有内容,返回一个列表,每一行的数据作为一个元素。
    test_txt_file = open('test.txt', 'r') print(test_txt_file.readlines()) # ['qqqq\\n', 'zxcz\\n', #'aaaa\\n', 'sad\\n', 'aasdasd'] test_txt_file.close()
    • readline()一次读取一行内容
    test_txt_file = open('test.txt', 'r') print('第一行:%s' % test_txt_file.readline()) print('第二行:%s' % test_txt_file.readline()) test_txt_file.close() # 第一行:qqqq # 第二行:zxcz

    注意:读的内容永远在指针之后。譬如,在’a+'模式下直接读取内容,是空白文件。

    11.2.3seek()用以移动文件指针 文件对象.seek(偏移量, 起始位置)

    起始位置:

    • 0:文件开头
    • 1:当前位置
    • 2:文件结尾
    11.3文件备份

    需求:输入文件的名字,然后程序自动完成对文件进行备份

    步骤:1.接收用户输入的文件名;2.规划备份文件名;3.备份文件写入数据

    old_filename = input("请输入您要备份的文件名:") index = old_filename.rfind('.') print(old_filename[:index]) print(old_filename[index:]) if index > 0: # 有效文件才备份 new_filename = old_filename[:index] + \\ "[备份]" + old_filename[index:] # file = open(old_filename, 'a') # 假设刚好是备份这个文件 # file.close() print(new_filename) old_file = open(old_filename, 'rb') new_file = open(new_filename, 'wb') while True: live_con = old_file.read(1024) if len(live_con) != 0: new_file.write(live_con) else: break old_file.close() new_file.close() 11.4文件和文件夹的操作
    • 在Python中文件和文件夹的操作要借助os模块里面的相关功能,步骤如下:
    import os # 1.导入os模块 os.函数名() # 2.适应os模块的相关功能 11.4.1文件的重命名与删除 os.rename(目标文件名, 新文件名) os.remove(目标文件名) 11.4.2文件夹与目录 os.mkdir(文件夹名字) # 创建文件夹 os.rmdir(文件夹名字) # 删除文件夹 os.getcwd() # 获取当前目录 os.chdir(目录) # 改变默认目录 os.listdir(目录) # 获取 目录 列表 os.rename(目标文件夹名, 新文件夹名) 11.4.3批量重命名
    • 添加字符串
    file_list = os.listdir() for post_name in file_list: new_name = 'Python_' + post_name os.rename(post_name, new_name)
    • 删除字符串
    file_list = os.listdir() flag = 2 # 构造条件的数据 for post_name in file_list: if flag == 1: new_name = 'Python_' + post_name elif flag == 2: num = len('Python_') new_name = post_name[num:] os.rename(post_name, new_name)

    该阶段正式进入Python这门语言的学习,首先通过了解Python语言的起源,Python语言的设计目标,Python语言的设计哲学,Python语言的优缺点和面向对象的基本概念,以及Python语言的执行方式,还有Python集成开发环境PyCharm的使用为我们接下来的学习做铺垫。

    然后会学习int,string,float三种简单的变量类型,变量间的计算,变量的输入输出,if判断语句,while循环语句,for循环语句,break和continue的使用,函数的基本使用,模块的使用,列表,元组,字典三种高级变量,字符串的常用操作。

    接下来会通过一个名片管理系统的案例,把这一阶段的知识进行一个串联。在学习名片管理系统时,首先我们会学习怎么去搭建这一系统的框架,然后我们会分别实现新增名片,显示全部名片,查询名片,删除名片,修改名片这些功能。

    最后会学习语法的进阶内容,全局变量,局部变量,可变数据类型和不可变数据类型以及函数返回多个值,函数的缺省参数,多值参数,递归的基本使用。

    写代码一定要注意Tab缩进与空格不要混用!

    本文标签: 黑马程序员语法学习笔记基础