Python入门笔记

本文为Python初学者提供了一条学习路径,重点讲解了数据分析环境的搭建,包括Anaconda的安装与管理,以及Jupyter Notebook的使用。此外,还介绍了Python的基础知识,如异常处理、内置函数和数据类型,特别关注了数据分析相关的库如NumPy、Pandas和Matplotlib的使用。文章强调了动手实践的重要性,并提供了多个学习资源。
摘要由CSDN通过智能技术生成


前言

想学会一门语言不是一朝一夕的事情,本文是按照业务数据分析师/商业分析师 的路线来讲 Python 的学习路径。若大家想成为技术型的分析师,或者未来往数 据挖掘发展,建议你要比文章内容学得更深,所有的代码最好都手打一遍,这是 最有效的学习方式。

学习网站

https://www.liaoxuefeng.com/wiki/1016959663602400

https://www.runoob.com/python/python-tutorial.html

https://python3-cookbook.readthedocs.io/zh_CN/latest/chapters/p08_classes_and_objects.html

运行环境

IDE集成开发环境(Integrated Development Environment )工具。用 Anaconda 足矣。Anaconda是专业的数据科学计算环境,包含180+的科学包及其依赖项的发行版本。其包含的科学包包括:conda, numpy, scipy, ipython notebook等。不需要多余的安装和调试。

Anaconda

Anaconda(官方网站)就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。

Mac 版本只有一个 Navigator 导航。数 据分析最常用的程序叫 Jupyter,以前被称为 IPython Notebook,是一个交互式的 笔记本,能快速创建程序,支持实时代码、可视化和 Markdown 语言。 点击 Jupyter 进入,它会自动创建一个本地环境 localhost。

特点

  • 开源
  • 安装过程简单
  • 高性能使用Python和R语言
  • 免费的社区支持

适用平台

Anaconda可以在以下系统平台中安装和使用:

  • Windows
  • macOS
  • Linux(x86 / Power8)

安装条件

  • 系统要求:32位或64位系统均可
  • 下载文件大小:约500MB
  • 所需空间大小:3GB空间大小(Miniconda仅需400MB空间即可)

安装步骤

1.1 macOS系统安装Anaconda

① 图形界面安装

  1. 前往官方下载页面下载。有两个版本可供选择:Python 3.6 和 Python 2.7,我下载的是前者。选择版之后点击“64-Bit Graphical Installer”进行下载。

  2. 完成下载之后,双击下载文件,在对话框中“Introduction”、“Read Me”、“License”部分可直接点击下一步。

  3. “Destination Select”部分选择“Install for me only”并点击下一步。

    注意:若有错误提示信息“You cannot install Anaconda in this location”则重新选择“Install for me only”并点击下一步。

  4. “Installation Type”部分,可以点击“Change Install Location”来改变安装位置。标准的安装路径是在用户的家目录下。在这一步我没有改变安装位置。若选择默认安装路径,则直接点击“Install”进行安装。

  5. 等待“Installation”部分结束,在“Summary”部分若看到“The installation was completed successfully.”则安装成功,直接点击“Close”关闭对话框。

  6. 在mac的Launchpad中可以找到名为“Anaconda-Navigator”的图标,点击打开。

  7. 若“Anaconda-Navigator”成功启动,则说明真正成功地安装了Anaconda;如果未成功,请务必仔细检查以上安装步骤。

  8. “Anaconda-Navigator”中已经包含“Jupyter Notebook”、“Jupyterlab”、“Qtconsole”和“Spyder”。(图中的“Rstudio”是我后来安装的,但它默认出现在“Anaconda-Navigator”的启动界面,只需要点击“Install”便可安装。)

  9. 完成安装。

1.2mac命令行安装
  1. 前往官方下载页面下载。有两个版本可供选择:Python 3.6 和 Python 2.7,我下载的是前者。选择版之后点击“64-Bit Command-Line Installer”进行下载。

  2. 完成下载之后,在mac的Launchpad中找到“其他”并打开“终端”。

    1. 安装Python 3.6:bash ~/Downloads/Anaconda3-5.0.1-MacOSX-x86_64.sh
    2. 安装Python 2.7:bash ~/Downloads/Anaconda2-5.0.1-MacOSX-x86_64.sh
  3. 注意:

    1. 首词bash也需要输入,无论是否用的Bash shell。
    2. 如果你的下载路径是自定义的,那么把该步骤路径中的~/Downloads替换成你自己的下载路径。
    3. 如果你将第1步下载的.sh文件重命名了,那么把该步骤路径中的Anaconda3-5.0.1-MacOSX-x86_64.sh或Anaconda2-5.0.1-MacOSX-x86_64.sh替换成你重命名后的文件名。
    4. 强烈建议:不要修改文件名。如果重命名,使用英文进行命名。
  4. 安装过程中,看到提示“In order to continue the installation process, please review the license agreement.”(“请浏览许可证协议以便继续安装。”),点击“Enter”查看“许可证协议”。

  5. 在“许可证协议”界面将屏幕滚动至底,输入“yes”表示同意许可证协议内容。然后进行下一步。

  6. 安装过程中,提示“Press Enter to confirm the location, Press CTRL-C to cancel the installation or specify an alternate installation directory.”(“按回车键确认安装路径,按’CTRL-C’取消安装或者指定安装目录。”)如果接受默认安装路径,则会显示“PREFIX=/home//anaconda<2 or 3>”并且继续安装。安装过程大约需要几分钟的时间。

    1. 建议:直接接受默认安装路径。
  7. 安装器若提示“Do you wish the installer to prepend the Anaconda install location to PATH in your /home//.bash_profile ?”(“你希望安装器添加Anaconda安装路径在/home//.bash_profile文件中吗?”),建议输入“yes”。

    注意:

    1. 路径/home//.bash_profile中“”即进入到家目录后你的目录名。
    2. 如果输入“no”,则需要手动添加路径。添加export PATH="/ /bin:$PATH"在“.bashrc”或者“.bash_profile”中。其中,“ ”替换为你真实的Anaconda安装路径。
  8. 当看到“Thank you for installing Anaconda!”则说明已经成功完成安装。

  9. 关闭终端,然后再打开终端以使安装后的Anaconda启动。

  10. 验证安装结果。可选用以下任意一种方法:

    1. 在终端中输入命令condal list,如果Anaconda被成功安装,则会显示已经安装的包名和版本号。
    2. 在终端中输入python。这条命令将会启动Python交互界面,如果Anaconda被成功安装并且可以运行,则将会在Python版本号的右边显示“Anaconda custom (64-bit)”。退出Python交互界面则输入exit()或quit()即可。
    3. 在终端中输入anaconda-navigator。如果Anaconda被成功安装,则Anaconda Navigator的图形界面将会被启动。
1.3Windows系统安装Anaconda
  1. 前往官方下载页面下载。有两个版本可供选择:Python 3.6 和 Python 2.7,选择版之后根据自己操作系统的情况点击“64-Bit Graphical Installer”或“32-Bit Graphical Installer”进行下载。
  2. 完成下载之后,双击下载文件,启动安装程序。注意:
    1. 如果在安装过程中遇到任何问题,那么暂时地关闭杀毒软件,并在安装程序完成之后再打开。
    2. 如果在安装时选择了“为所有用户安装”,则卸载Anaconda然后重新安装,只为“我这个用户”安装。
    3. 选择“Next”。
  3. 阅读许可证协议条款,然后勾选“I Agree”并进行下一步。
  4. 除非是以管理员身份为所有用户安装,否则仅勾选“Just Me”并点击“Next”。
  5. 在“Choose Install Location”界面中选择安装Anaconda的目标路径,然后点击“Next”。注意:
    1. 目标路径中不能含有空格,同时不能是“unicode”编码。
    2. 除非被要求以管理员权限安装,否则不要以管理员身份安装。
  6. 在“Advanced Installation Options”中不要勾选“Add Anaconda to my PATH environment variable.”(“添加Anaconda至我的环境变量。”)。因为如果勾选,则将会影响其他程序的使用。如果使用Anaconda,则通过打开Anaconda Navigator或者在开始菜单中的“Anaconda Prompt”(类似macOS中的“终端”)中进行使用。
  7. 除非你打算使用多个版本的Anaconda或者多个版本的Python,否则便勾选“Register Anaconda as my default Python 3.6”
  8. 然后点击“Install”开始安装。如果想要查看安装细节,则可以点击“Show Details”。
  9. 点击“Next”。
  10. 进入“Thanks for installing Anaconda!”界面则意味着安装成功,点击“Finish”完成安装。注意:如果你不想了解“Anaconda云”和“Anaconda支持”,则可以不勾选“Learn more about Anaconda Cloud”和“Learn more about Anaconda Support”。
  11. 验证安装结果。可选以下任意方法:
    1. “开始 → Anaconda3(64-bit)→ Anaconda Navigator”,若可以成功启动Anaconda Navigator则说明安装成功。
    2. “开始 → Anaconda3(64-bit)→ 右键点击Anaconda Prompt → 以管理员身份运行”,在Anaconda Prompt中输入conda list,可以查看已经安装的包名和版本号。若结果可以正常显示,则说明安装成功。
1.4 Linux系统安装Anaconda
  1. 前往官方下载页面下载。有两个版本可供选择:Python 3.6 和 Python 2.7。
  2. 启动终端,在终端中输入命令md5sum /path/filename或sha256sum /path/filename注意:
    1. 将该步骤命令中的/path/filename替换为文件的实际下载路径和文件名。其中,path是路径,filename为文件名。
    2. 强烈建议:
      1. 路径和文件名中不要出现空格或其他特殊字符。
      2. 路径和文件名最好以英文命名,不要以中文或其他特殊字符命名。
  3. 根据Python版本的不同有选择性地在终端输入命令:
    1. Python 3.6:bash ~/Downloads/Anaconda3-5.0.1-Linux-x86_64.sh
    2. Python 2.7:bash ~/Downloads/Anaconda2-5.0.1-Linux-x86_64.sh
    3. 注意:
      1. 首词bash也需要输入,无论是否用的Bash shell。
      2. 如果你的下载路径是自定义的,那么把该步骤路径中的~/Downloads替换成你自己的下载路径。
  4. 除非被要求使用root权限,否则均选择“Install Anaconda as a user”。
  5. 安装过程中,看到提示“In order to continue the installation process, please review the license agreement.”(“请浏览许可证协议以便继续安装。”),点击“Enter”查看“许可证协议”。
  6. 在“许可证协议”界面将屏幕滚动至底,输入“yes”表示同意许可证协议内容。然后进行下一步。
  7. 安装过程中,提示“Press Enter to accept the default install location, CTRL-C to cancel the installation or specify an alternate installation directory.”(“按回车键确认安装路径,按’CTRL-C’取消安装或者指定安装目录。”)如果接受默认安装路径,则会显示“PREFIX=/home//anaconda<2 or 3>”并且继续安装。安装过程大约需要几分钟的时间。建议:直接接受默认安装路径。
    1. 安装器若提示“Do you wish the installer to prepend the Anaconda<2 or 3> install location to PATH in your /home//.bashrc ?”(“你希望安装器添加Anaconda安装路径在/home//.bashrc文件中吗?”),建议输入“yes”。注意:
      1. 路径/home//.bash_rc中“”即进入到家目录后你的目录名。
      2. 如果输入“no”,则需要手动添加路径,否则conda将无法正常运行。
  8. 当看到“Thank you for installing Anaconda<2 or 3>!”则说明已经成功完成安装。
  9. 关闭终端,然后再打开终端以使安装后的Anaconda启动。或者直接在终端中输入source ~/.bashrc也可完成启动。
  10. 验证安装结果。可选用以下任意一种方法:
    1. 在终端中输入命令condal list,如果Anaconda被成功安装,则会显示已经安装的包名和版本号。
    2. 在终端中输入python。这条命令将会启动Python交互界面,如果Anaconda被成功安装并且可以运行,则将会在Python版本号的右边显示“Anaconda custom (64-bit)”。退出Python交互界面则输入exit()或quit()即可。
    3. 在终端中输入anaconda-navigator。如果Anaconda被成功安装,则Anaconda Navigator将会被启动。

管理conda

  1. 写在前面

    接下来均是以命令行模式进行介绍,Windows用户请打开“Anaconda Prompt”;macOS和Linux用户请打开“Terminal”(“终端”)进行操作。

  2. 验证conda已被安装

    conda --version

    终端上将会以conda 版本号的形式显示当前安装conda的版本号。如:conda 3.11.0

    注意:如果出现错误信息,则需核实是否出现以下情况:

    1. 使用的用户是否是安装Anaconda时的账户。
    2. 是否在安装Anaconda之后重启了终端。
  3. 更新conda至最新版本

conda update conda

执行命令后,conda将会对版本进行比较并列出可以升级的版本。同时,也会告知用户其他相关包也会升级到相应版本。

当较新的版本可以用于升级时,终端会显示Proceed ([y]/n)?,此时输入y即可进行升级。

  1. 查看conda帮助信息

    conda --help 或 conda -h

  2. 卸载conda

    1. Linux 或 macOS

      rm -rf ~/anaconda2 或 rm -rf ~/anaconda3 。即删除Anaconda的安装目录。根据安装的Anaconda版本选择相应的卸载命令。

    2. Windows

    控制面板 → 添加或删除程序 → 选择“Python X.X (Anaconda)” → 点击“删除程序”

  3. 注意:

    1. Python X.X:即Python的版本,如:Python 3.6。
    2. Windows 10的删除有所不同。

管理环境

  1. 写在前面

    接下来均是以命令行模式进行介绍,Windows用户请打开“Anaconda Prompt”;macOS和Linux用户请打开“Terminal”(“终端”)进行操作。

  2. 创建新环境

    conda create --name <env_name> <package_names>注意:

    1. <env_name>即创建的环境名。建议以英文命名,且不加空格,名称两边不加尖括号“<>”。
    2. <package_names>即安装在环境中的包名。名称两边不加尖括号“<>”。
  3. 如果要安装指定的版本号,则只需要在包名后面以=和版本号的形式执行。如:conda create --name python2 python=2.7,即创建一个名为“python2”的环境,环境中安装版本为2.7的python。

  4. 如果要在新创建的环境中创建多个包,则直接在<package_names>后以空格隔开,添加多个包名即可。如:conda create -n python3 python=3.5 numpy pandas,即创建一个名为“python3”的环境,环境中安装版本为3.5的python,同时也安装了numpy和pandas。

    1. –name同样可以替换为-n。
    2. 提示:默认情况下,新创建的环境将会被保存在/Users/<user_name>/anaconda3/env目录下,其中,<user_name>为当前用户的用户名。
  5. 切换环境

    ① Linux 或 macOS

    source activate <env_name>

    ② Windows

    activate <env_name>

    ③ 提示

    1. 如果创建环境后安装Python时没有指定Python的版本,那么将会安装与Anaconda版本相同的Python版本,即如果安装Anaconda第2版,则会自动安装Python 2.x;如果安装Anaconda第3版,则会自动安装Python 3.x。
    2. 当成功切换环境之后,在该行行首将以“(env_name)”或“[env_name]”开头。其中,“env_name”为切换到的环境名。如:在macOS系统中执行source active python2,即切换至名为“python2”的环境,则行首将会以(python2)开头。
  6. 退出环境至root

    ① Linux 或 macOS

    source deactivate

    ② Windows

    deactivate

    ③ 提示

    当执行退出当前环境,回到root环境命令后,原本行首以“(env_name)”或“[env_name]”开头的字符将不再显示。

  7. 显示已创建环境

    conda info --envs 或

    conda info -e或 conda env list 结果中星号“*”所在行即为当前所在环境。macOS系统中默认创建的环境名为“base”。

  8. 复制环境

    conda create --name <new_env_name> --clone <copied_env_name>注意:

    1. <copied_env_name>即为被复制/克隆环境名。环境名两边不加尖括号“<>”。
    2. <new_env_name>即为复制之后新环境的名称。环境名两边不加尖括号“<>”。
    3. 如:conda create --name py2 --clone python2,即为克隆名为“python2”的环境,克隆后的新环境名为“py2”。此时,环境中将同时存在“python2”和“py2”环境,且两个环境的配置相同。
  9. 删除环境

    conda remove --name <env_name> --all

  • 注意:<env_name>为被删除环境的名称。环境名两边不加尖括号“<>”。

管理包

  1. 查找可供安装的包版本

    ① 精确查找

    conda search --full-name <package_full_name> 注意:

    1. –full-name为精确查找的参数。

    2. <package_full_name>是被查找包的全名。包名两边不加尖括号“<>”。

      例如:conda search --full-name python即查找全名为“python”的包有哪些版本可供安装。

  2. 模糊查找

    conda search 注意:

    1. 是查找含有此字段的包名。此字段两边不加尖括号“<>”。

      例如:conda search py即查找含有“py”字段的包,有哪些版本可供安装。

  3. 获取当前环境中已安装的包信息

    conda list 。执行上述命令后将在终端显示当前环境已安装包的包名及其版本号。

  4. 安装包

    ① 在指定环境中安装包

    conda install --name <env_name> <package_name> 注意:

    1. <env_name>即将包安装的指定环境名。环境名两边不加尖括号“<>”。

    2. <package_name>即要安装的包名。包名两边不加尖括号“<>”。

      例如:conda install --name python2 pandas即在名为“python2”的环境中安装pandas包。

    ② 在当前环境中安装包

    conda install <package_name> 注意:

    1. <package_name>即要安装的包名。包名两边不加尖括号“<>”。

    2. 执行命令后在当前环境中安装包。

      例如:conda install pandas即在当前环境中安装pandas包。

    ③ 使用pip安装包

    使用场景当使用conda install无法进行安装时,可以使用pip进行安装。例如:see包。→ 命令pip install <package_name> 注意:<package_name>为指定安装包的名称。包名两边不加尖括号“<>”。 如:pip install see即安装see包。注意

    1. pip只是包管理器,无法对环境进行管理。因此如果想在指定环境中使用pip进行安装包,则需要先切换到指定环境中,再使用pip命令安装包。
    2. pip无法更新python,因为pip并不将python视为包。
    3. pip可以安装一些conda无法安装的包;conda也可以安装一些pip无法安装的包。因此当使用一种命令无法安装包时,可以尝试用另一种命令。

    ④ 从Anaconda.org安装包

    1. 使用场景当使用conda install无法进行安装时,可以考虑从Anaconda.org中获取安装包的命令,并进行安装。 注意
      1. 从Anaconda.org安装包时,无需注册。
      2. 在当前环境中安装来自于Anaconda.org的包时,需要通过输入要安装的包在Anaconda.org中的路径作为获取途径(channel)。查询路径的方式如下:
    2. 在浏览器中输入:http://anaconda.org,或直接点击Anaconda.org
    3. 在新页面“Anaconda Cloud”的上方搜索框中输入要安装的包名,然后点击右边“放大镜”标志。
    4. 搜索结果中有数以千计的包可供选择,此时点击“Downloads”可根据下载量进行排序,最上面的为下载最多的包。(图中以搜索bottleneck包为例)
    5. 选择满足需求的包或下载量最多的包,点击包名。
    6. 复制“To install this package with conda run:”下方的命令,并粘贴在终端中执行。
    7. 完成安装。
  5. 卸载包

    ① 卸载指定环境中的包

    conda remove --name <env_name> <package_name> 注意:

    1. <env_name>即卸载包所在指定环境的名称。环境名两边不加尖括号“<>”。
    2. <package_name>即要卸载包的名称。包名两边不加尖括号“<>”。 例如:conda remove --name python2 pandas即卸载名为“python2”中的pandas包。

    ② 卸载当前环境中的包

    conda remove <package_name> 注意:

    1. <package_name>即要卸载包的名称。包名两边不加尖括号“<>”。
    2. 执行命令后即在当前环境中卸载指定包。例如:conda remove pandas即在当前环境中卸载pandas包。
  6. 更新包

    1. 更新所有包 conda update --all 或 conda upgrade --all

      1. 建议:在安装Anaconda之后执行上述命令更新Anaconda中的所有包至最新版本,便于使用。
    2. 更新指定包

      conda update <package_name>或 conda upgrade <package_name>

      注意:

      1. <package_name>为指定更新的包名。包名两边不加尖括号“<>”。
      2. 更新多个指定包,则包名以空格隔开,向后排列。如:conda update pandas numpy matplotlib即更新pandas、numpy、matplotlib包。

参考资料

  1. 知乎“初学python者自学anaconda的正确姿势是什么??”猴子的回答
  2. Anaconda Cheat Sheet
  3. Anaconda官方网站
  4. conda官方网站
  5. pip维基百科
  6. pip官方网站
  7. YouTube视频:Pip vs Conda: Differences and Comparisons
  8. virtualenv官方网站
  9. macOS系统安装Anaconda的官方教程
  10. Windows系统安装Anaconda的官方教程
  11. Linux系统安装Anaconda的官方教程
  12. Conda Official User Guide

Jupyter Notebook

灰色框是输入程序的地方,回车是换行,shift+回车执 行灰色区域的代码,它的结果会直接在下面空白处出现。这就是 Jupyter 交互式 的强大地方,将 Python 脚本分成片段式运行,尤其适合数据分析的摸索调整工 作

提示 x
  1. 按tab键查看提示信息或者补全命令
  2. 在一个库、方法或变量前加上 ?,就可以获得它的一个快速语法说明
  3. 使用分号可以阻止该行函数的结果输出
界面速查表

运行查看
命令和编辑模式
帮助
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Pycharm

Pycharm安装

用community版就可以;了解PyCharm的界面布局; 设置PyCharm的解释器 ; 调整PyCharm的界面主题与样式

PyCharm安装使用教程

macOS Mojave安装PyCharm 2018.x 最新版

Pycharm 解释器

pyCharm 快速上手指南

pyCharm 快捷键

PyCharm项目

PyCharm采用“项目(Project)”的方式管理源代码;一个项目通常就是一个完整的程序,包含多个源代码文件 ; 通常项目是以目录的方式保存。

快捷键

win mac
快速注释-块注释 来自 注释 ctrl+/
格式化代码 ctrl+alt+L
运行 shift+ctrl+f10
复制行 ctrl+d
调试
开始调试 shift+alt+f9
逐行执行 F7
停止调试 ctrl + f2
调节格式 alt + enter
快速查看函数的格式 按住ctrl键,将鼠标放到函数上,就会显示函数信息,点击进去可以查看函数源码。

pip

  1. pip是用于安装和管理软件包的包管理器。

    pip名称的由来:pip采用的是递归缩写进行命名的。其名字被普遍认为来源于2处:

    “Pip installs Packages”(“pip安装包”)

    “Pip installs Python”(“pip安装Python”)

  2. pip编写语言:仅适用于Python

  3. Python中默认安装的版本:

    Python 2.7.9及后续版本:默认安装,命令为pip

    Python 3.4及后续版本:默认安装,命令为pip3

  4. 特点

    • 不一定会展示所需其他依赖包。
    • 安装包时或许会直接忽略依赖项而安装,仅在结果中提示错误
    • 维护多个环境难度较大。
    • 在系统自带Python中包的**更新/回退版本/卸载将影响其他程序。

虚拟环境 virtualenv

  1. 虚拟环境

    python 的虚拟环境可以为一个 python 项目提供独立的解释环境、依赖包等资源,既能够很好的隔离不同项目使用不同 python 版本带来的冲突,而且还能方便项目的发布。

    1. 解决问题:
      1. 当一个程序需要使用Python 2.7版本,而另一个程序需要使用Python 3.6版本,如何同时使用这两个程序?
      2. 如果将所有程序都安装在系统下的默认路径,如:/usr/lib/python2.7/site-packages,当不小心升级了本不该升级的程序时,将会对其他的程序造成影响。
      3. 如果想要安装程序并在程序运行时对其库或库的版本进行修改,都会导致程序的中断。
      4. 在共享主机时,无法在全局site-packages目录中安装包。
  2. virtualenv

    virtualenv可用于创建独立的 Python 环境,它会创建一个包含项目所必须要的执行文件。virtualenv将会为它自己的安装目录创建一个环境,这并不与其他virtualenv环境共享库;同时也可以选择性地不连接已安装的全局库

    1. 安装 virtualenv**
      • pip install virtualenv
  3. pycharm配置本地python虚拟环境

    1. PyCharm默认为虚拟环境

配置环境变量

配置环境变量-MAC

mac安装python3.7,配置环境变量。因mac自带python2.7环境,平时用的比较多的是python3.7,下面将安装及配置过程需要注意,避免这些坑。

  1. 安装软件包python3.7.pkg

  2. 进入终端,配置Python3环境变量

    1. open ~/.bash_profile

    2. 在文件末尾添加:

      export PATH=${PATH}:/Library/Frameworks/Python.framework/Versions/3.7/bin

      alias python=“/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7”

    3. 让文件生效

      source ~/.bash_profile

    4. 进入终端,检查python版本

      python -v

配置环境变量-WIN

  1. 配置环境变量

    1. 快捷键ctrl + R 输入cmd进入命令行界面

    2. 命令行中输入python,可以看到已经进入了python环境。

      在这个步骤中,如果输入python提示命令未找到,说明环境变量配置失败。我们开始来配置环境变量。

  2. 配置环境变量:

    方法一:使用命令行配置。

    在cmd下输入:path=%path%;后面加上python安装路径。按enter回车即可。

    方法二:使用图形界面配置。

    1. 桌面我的计算机,右键选择属性

    2. 属性里面选择高级,点下面的环境变量

    3. 在系统变量值中找到“path”,在系统变量值中输入python的安装路径。(记得先加;分号隔开)配置完成之后确定退出。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FiWmAzaR-1614984312160)(/Users/wu/Library/Application Support/typora-user-images/image-20210123215459993.png)]

    4. 再次打开cmd,输入python,即可进入python环境,大功告成!

基础知识:

简介

Python是一种面向对象的解释型计算机程序设计语言,总特点: 语言简洁,上手轻松 ;Python是最好的大数据、人工智能语言 ;庞大的用户群体,成熟的技术体系,遍及人工智能、科学计算、Web开发、系统运维、大数据及云计算、金融、游戏开发等。

特点

  • 解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。

  • 交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。

  • 面向对象语言: 面向对象的语言,拥有各种功能方法即method。意思就是把要处理的对象按照格式放到对应的括号里。这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

  • **1.易于学习:**Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。适用于短平快的日常任务

  • **2.易于阅读:**Python代码定义的更清晰。

  • **3.易于维护:**Python的成功在于它的源代码是相当容易维护的。

  • 4.一个广泛的标准库:实现其强大功能的前提,就是Python具有数量庞大且功能相对完善的标准库和第三方库。

  • **5.互动模式:**互动模式的支持,您可以从终端输入并获得结果的语言,互动的测试和调试代码片断。

  • **6.便携式:**Python可以运行在多种硬件平台和所有平台上都具有相同的接口。

    具有跨平台的特点,可以在Linux、macOS以及Windows系统中搭建环境并使用,其编写的代码在不同平台上运行时,几乎不需要做较大的改动,使用者无不受益于它的便捷性。

  • 7.可扩展**(开源)****:**可以添加低层次的模块到Python解释器。这些模块使程序员可以添加或定制自己的工具,更有效。

  • **8.数据库:**Python提供所有主要的商业数据库的接口。

  • **9.GUI编程:**Python支持GUI可以创建和移植到许多系统调用。

  • **10.可扩展性:**相比 shell 脚本,Python 提供了一个更好的结构,且支持大型程序。

发展历史

Python是由Guido van Rossum在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。

Python 本身也是由诸多其他语言发展而来的,这包括ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell 和其他的脚本语言等等。像Perl语言一样, Python 源代码同样遵循 GPL(GNU General Public License)协议。现在Python是由一个核心开发团队在维护,Guido van Rossum 仍然占据着至关重要的作用,指导其进展。

执行原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pomMTJ7g-1614984312162)(/Users/wu/Library/Application Support/typora-user-images/image-20210123212608467.png)]

python执行过程:源代码 –编译–> 字节码(特定python的表现形式.pyc) –解释–> 机器码

程序执行方式

  1. 交互式

    1. 定义:在命令行输入指令,回车即可得到结果。

    2. 步骤:

      1. 打开终端
      2. 输入:python3
      3. 输入: print(“Hello World”)
      4. 退出:exit()
  2. 文件式

    1. 定义:将指令编写到.py文件中,可以重复运行程序。
       2. 步骤:
                 1. 创建文件:/home/tarena/1902/month01/day01/hello.py
              2. 打开终端进入指定目录 cd /1902/month01/day01
              3. 运行python程序  python3 hello.py
    

Python 版本

建议 3.0 以上,不要选择 2.7 的版本,否则你会被无尽的中文编码问 题困扰。

2.7安装

3.8帮助文档

python2和 python3区别?列举5个
  1. Python3使用 print必须要以小括号包裹打印内容,比如 print(h)Python2既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比如 print"hi
  2. python2 range(1,10)返回列表, python3中返回迭代器,节约内存
  3. python2中使用asci编码, python中使用utf-8编码
  4. python2中 unicode表示字符串序列,str表示字节序列
    python3中st表示字符串序列,byte表示字节序列
  5. python2中为正常显示中文,引入 coding声明, python3中不需要
  6. python2中是 raw input()函数, python3中是 input(函数

程序调整Debug

  1. 调试目的

    理解程序执行过程、排除逻辑错误(不是Error)

  2. 方式

    pycharm:

    加断点(程序运行到本行停止,没有执行本行)

    开始调试shift+alt+f9

    逐行执行 F7

    停止调试ctrl + f2

GIL全局解释器锁

GIL是 python的全局解释器锁,进程中假如有多个线程运行,一个线程在运python程序的时候会霸占 python解释器(加了一把锁即G),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个 python解释器所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大

提高python运行效率的方法?

  1. 使用生成器,因为可以节约大量内存
  2. 循环代码优化,避免过多重复代码的执
  3. 核心模块用 Cthon PyPy等,提高效率
  4. 多进程、多线程、协程
  5. 多个elf条件判断,可以把最有可能先发生的条件放到前面写,这样可以减少程序判断的次数,提高效率

异常

什么是异常?

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

一般情况下,在Python无法正常处理程序时就会发生一个异常。

异常是Python对象,表示一个错误。

当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。大多数的异常都不会被程序处理,都以错误信息的形式展现在这里

异常的类别

标准异常
异常类名 描述
Exception 常规错误的基类,几乎所有的异常都是由此派生而来
BaseException 所有异常的基类
AttributeError 对象没有这个属性,引用属性或者赋值失败
SyntaxError 代码语法错误
TypeError 对类型无效的操作,将内置函数或者操作用于类型不正确时
OSError 操作系统错误类,有多个子类。操作系统不能执行指定的任务时引发
LookupError 无效数据查询的基类
IndexError 序列中没有此索引(index)。为lookupError的子类
ZeroDivisionError 除(或取模)零 (所有数据类型)
NameError 未声明/初始化对象 (没有属性)
ValueError 传入无效的参数,类型正确但值不合适
StopIteration 迭代器没有更多的值
SystemExit 解释器请求退出
KeyboardInterrupt 用户中断执行(通常是输入^C)
GeneratorExit 生成器(generator)发生异常来通知退出
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
AssertionError 断言语句失败
EOFError 没有内建输入,到达EOF 标记
EnvironmentError 操作系统错误的基类
IOError 输入/输出操作失败
WindowsError 系统调用失败
ImportError 导入模块/对象失败
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于Python 解释器不是致命的)
UnboundLocalError 访问未初始化的本地变量
ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
IndentationError 缩进错误
TabError Tab 和空格混用
SystemError 一般的解释器系统错误
UnicodeError Unicode 相关的错误
UnicodeDecodeError Unicode 解码时的错误
UnicodeEncodeError Unicode 编码时错误
UnicodeTranslateError Unicode 转换时错误
Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告
自定义异常

通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类的自定义类**

异常处理try…except

  1. 捕捉异常可以使用try/except语句。

    try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。如果你不想在异常发生时结束你的程序,只需在try里捕获它。

  2. 异常的传递

    如果异常在产生的地方不被捕获,异常会一层层向外抛出,各层调用程序后的程序则不会执行。

  3. 语法:以下为简单的try…except…else的语法:

    try:
    <语句> #运行别的代码
    except <名字>:
    <语句> #如果在try部份引发了’name’异常
    except <名字>,<数据>:
    <语句> #如果引发了’name’异常,获得附加的数据
    else:
    <语句> #如果没有异常发生

  4. try的工作原理是

    1. 当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
    2. 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
    3. 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。
    4. 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
  5. 实例

下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,但文件没有写入权限,发生了异常:

\#!/usr/bin/python
 \# -*- coding: UTF-8 -*-

try:
   fh = open("testfile", "w")
   fh.write("这是一个测试文件,用于测试异常!!")
 except IOError:
   print "Error: 没有找到文件或读取文件失败"
 else:
   print "内容写入文件成功"
   fh.close()
# 在执行代码前为了测试方便,我们可以先去掉 testfile 文件的写权限,命令如下:
chmod -w testfile
# 再执行以上代码:
$ python test.py 
 Error: 没有找到文件或读取文件失败

  1. 拓展
    • 使用except而不带任何异常类型
    • 使用except而带多种异常类型
    • 使用多个except而带多种异常类型
    • try-finally 语句
    • 异常的参数

抛出异常 raise

  1. 定义:可以在程序的指定位置手动抛出一个异常,使用 raise 语句即可。

  2. 作用:我们从来都是想方设法地让程序正常运行,为什么还要手动设置异常呢?首先要分清楚程序发生异常和程序执行错误,它们完全是两码事,程序由于错误导致的运行异常,是需要程序员想办法解决的;但还有一些异常,是程序正常运行的结果,比如用 raise 手动引发的异常。引发的异常通常用 try except(else finally)异常处理结构来捕获并进行处理。

  3. raise 语句的基本语法格式为:

    raise [Exception [, args [, traceback]]]
    
    • Exception 是异常的类型(例如,NameError)参数标准异常中任一种
    • args 是自已提供的异常参数。
    • 最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
    • 用 [] 括起来的为可选参数,其作用是指定抛出的异常名称,以及异常信息的相关描述。如果可选参数全部省略,则 raise 会把当前错误原样抛出;如果仅省略 (reason),则在抛出异常时,将不附带任何的异常描述信息。可以通过创建一个新的exception类来拥有自己的异常。
  4. raise 语句有如下三种常用的用法:

    1. raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。

      如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。

      • 默认引发的是 RuntimeError 异常

      当在没有引发过异常的程序使用无参的 raise 语句时,它默认引发:RuntimeError 异常

    2. raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。

    3. raise 异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。

遇到bug如何处理?

  1. 细节错误

    细节上的错误,通过 print()打印,能执行到 print()说明一般上面的代码没有问
    题,分段检测程序是否有问题,如果是js的话可以 alert或 console. log

  2. 第三方框架

    如果涉及一些第三方框架,会去查官方文档或者一些技术博客

  3. bug的管理

    对于bug的管理与归类总结,一般测试将测试出的bug用 teambin等bug管理工具进
    行记录,然后我们会一条一条进行修改,修改的过程也是理解业务逻辑和提高自己编程逻
    辑缜密性的方法,我也都会收藏做一些笔记记录

  4. 其他问题

    导包问题、城市定位多音字造成的显示错误问题

内置函数

68个内置函数综合整理为12大类。

数字相关
1. 数据类型
  • bool : 布尔型(True,False)
  • int : 整型(整数)
  • float : 浮点型(小数)
  • complex : 复数
2. 进制转换
  • bin() 将给的参数转换成二进制

  • otc() 将给的参数转换成八进制

  • hex() 将给的参数转换成十六进制

    print(bin(10)) # 二进制:0b1010
    
    print(hex(10)) # 十六进制:0xa
    
    print(oct(10)) # 八进制:0o12
    
3. 数学运算
  • abs() 返回绝对值

  • divmode() 返回商和余数

  • round() 四舍五入

  • pow(a, b) 求a的b次幂, 如果有三个参数. 则求完次幂后对第三个数取余

  • sum() 求和

  • min() 求最小值

  • max() 求最大值

    print(abs(-2)) # 绝对值:2
    
    print(divmod(20,3)) # 求商和余数:(6,2)
    
    print(round(4.50))  # 五舍六入:4
    
    print(round(4.51))  #5
    
    print(pow(10,2,3)) # 如果给了第三个参数. 表示最后取余:1
    
    print(sum([1,2,3,4,5,6,7,8,9,10])) # 求和:55
    
    print(min(5,3,9,12,7,2)) #求最小值:2
    
    print(max(7,3,15,9,4,13)) #求最大值:15
    
序列相关
1.列表和元组
  • list() 将一个可迭代对象转换成列表

  • tuple() 将一个可迭代对象转换成元组

    print(list((1,2,3,4,5,6))) #[1, 2, 3, 4, 5, 6]
    print(tuple([1,2,3,4,5,6])) #(1, 2, 3, 4, 5, 6)
    
2.相关内置函数
  • reversed() 将一个序列翻转, 返回翻转序列的迭代器

  • slice() 列表的切片

    lst = "你好啊"
    
    it = reversed(lst)  # 不会改变原列表. 返回一个迭代器, 设计上的一个规则
    
    print(list(it)) #['啊', '好', '你']
    
    lst = [1, 2, 3, 4, 5, 6, 7]
    
    print(lst[1:3:1]) #[2,3]
    
    s = slice(1, 3, 1) # 切片用的
    
    print(lst[s]) #[2,3]
    
3.字符串
  • str() 将数据转化成字符串’

    当对象为字典、类别等类型时的括号、引号一并转化为字符类型

    print(str(123)+'456') #123456
    
  • format() 与具体数据相关, 用于计算各种小数, 精算等.

    s = "hello world!"
    
    print(format(s, "^20")) #剧中
    
    print(format(s, "<20")) #左对齐
    
    print(format(s, ">20")) #右对齐
    
    \#   hello world!  
    
    \# hello world!    
    
    \#    hello world!
    
    print(format(3, 'b' ))  # 二进制:11
    
    print(format(97, 'c' ))  # 转换成unicode字符:a
    
    print(format(11, 'd' ))  # ⼗进制:11
    
    print(format(11, 'o' ))  # 八进制:13 
    
    print(format(11, 'x' ))  # 十六进制(⼩写字母):b
    
    print(format(11, 'X' ))  # 十六进制(大写字母):B
    
    print(format(11, 'n' ))  # 和d⼀样:11
    
    print(format(11))     # 和d⼀样:11
    
    print(format(123456789, 'e' ))   # 科学计数法. 默认保留6位小数:1.234568e+08
    
    print(format(123456789, '0.2e' ))  # 科学计数法. 保留2位小数(小写):1.23e+08
    
    print(format(123456789, '0.2E' ))  # 科学计数法. 保留2位小数(大写):1.23E+08
    
    print(format(1.23456789, 'f' ))   # 小数点计数法. 保留6位小数:1.234568
    
    print(format(1.23456789, '0.2f' )) # 小数点计数法. 保留2位小数:1.23
    
    print(format(1.23456789, '0.10f')) # 小数点计数法. 保留10位小数:1.2345678900
    
    print(format(1.23456789e+3, 'F'))  # 小数点计数法. 很大的时候输出INF:1234.567890
    
  • bytes() 把字符串转化成bytes类型

    bs = bytes("今天吃饭了吗", encoding="utf-8")
    
    print(bs) #b'\xe4\xbb\x8a\xe5\xa4\xa9\xe5\x90\x83\xe9\xa5\xad\xe4\xba\x86\xe5\x90\x97
    
  • bytearray() 返回一个新字节数组. 这个数字的元素是可变的, 并且每个元素的值得范围是[0,256)

    ret = bytearray("alex" ,encoding ='utf-8')
    
    print(ret[0]) #97
    
    print(ret) #bytearray(b'alex')
    
    ret[0] = 65 #把65的位置A赋值给ret[0]
    
    print(str(ret)) #bytearray(b'Alex')
    
  • ord() 输入字符找带字符编码的位置

  • chr() 输入位置数字找出对应的字符

  • ascii() 是ascii码中的返回该值 不是就返回u

    print(ord('a')) # 字母a在编码表中的码位:97
    
    print(ord('中')) # '中'字在编码表中的位置:20013
    
    print(chr(65)) # 已知码位,求字符是什么:A
    
    print(chr(19999)) #丟
    for i in range(65536): #打印出0到65535的字符
    	print(chr(i), end=" ") 
    	print(ascii("@")) #'@'
    
  • repr() 返回一个对象的string形式

    s = "今天\n吃了%s顿\t饭" % 3
    print(s)#今天# 吃了3顿  饭
    print(repr(s))  # 原样输出,过滤掉转义字符 \n \t \r 不管百分号%
    \#'今天\n吃了3顿\t饭'
    
4. 数据集合
  • 字典:dict 创建一个字典

  • 集合:set 创建一个集合4

    有去重和排序的功能,因为集合是无序不重复元素

  • frozenset() 创建一个冻结的集合,冻结的集合不能进行添加和删除操作。

5. 集合相关内置函数
  • len() 返回一个对象中的元素的个数

  • sorted() 对可迭代对象进行排序操作 放回新的列表

    • 语法:sorted(Iterable, key=函数(排序规则), reverse=False)

    • Iterable: 可迭代对象

    • key: 排序规则(排序函数), 在sorted内部会将可迭代对象中的每一个元素传递给这个函数的参数. 根据函数运算的结果进行排序

    • reverse: 是否是倒叙. True: 倒叙, False: 正序

      lst = [5,7,6,12,1,13,9,18,5]
      lst.sort() # sort是list里面的一个方法,
      print(lst) #[1, 5, 5, 6, 7, 9, 12, 13, 18]
      ll = sorted(lst) # 内置函数. 返回给你一个新列表 新列表是被排序的
      print(ll) #[1, 5, 5, 6, 7, 9, 12, 13, 18]
      l2 = sorted(lst,reverse=**True**) #倒序
      print(l2) #[18, 13, 12, 9, 7, 6, 5, 5, 1]
      
      \#根据字符串长度给列表排序
      
      lst = ['one', 'two', 'three', 'four', 'five', 'six']
      def f(s):
        returnlen(s)
      l1 = sorted(lst, key=f )
      print(l1) #['one', 'two', 'six', 'four', 'five', 'three']
      
  • enumerate() 获取集合的枚举对象

    lst = ['one','two','three','four','five']
    for  index, el in  enumerate(lst,1):  # 把索引和元素一起获取,索引默认从0开始. 可以更改
    print(index)
    print(el)
    \# 1
    
    \# one
    
    \# 2
    
    \# two
    
    \# 3
    
    \# three
    
    \# 4
    
    \# four
    
    \# 5
    
    \# five
    
  • all() 可迭代对象中全部是True, 结果才是True

  • any() 可迭代对象中有一个是True, 结果就是True

    print(all([1,'hello',**True**,9])) #True
    
    print(any([0,0,0,**False**,1,'good'])) #True
    
  • zip() 函数用于将可迭代的对象作为参数, 将对象中对应的元素打包成一个元组, 然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致, 则返回列表长度与最短的对象相同

    lst1 = [1, 2, 3, 4, 5, 6]
    
    lst2 = ['醉乡民谣', '驴得水', '放牛班的春天', '美丽人生', '辩护人', '被嫌弃的松子的一生']
    
    lst3 = ['美国', '中国', '法国', '意大利', '韩国', '日本']
    
    print(zip(lst1, lst1, lst3)) #<zip object at 0x00000256CA6C7A88>
    
    for  el in zip(lst1, lst2, lst3):
      print(el)
    
    \# (1, '醉乡民谣', '美国')
    
    \# (2, '驴得水', '中国')
    
    \# (3, '放牛班的春天', '法国')
    
    \# (4, '美丽人生', '意大利')
    
    \# (5, '辩护人', '韩国')
    
    \# (6, '被嫌弃的松子的一生', '日本')
    
  • reduce

    • Reduce(fun,seq[,initial])

    • 按照指定的方法将序列中的元素缩减为一个值,最终是一个元素类型。

  • lamada

    1. 匿名函数.又称lambda表达式,用于处理简单业务的函数,不需要显式地定义函数,直接传入匿名函数。用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。

    2. 注意:

      1. 并非是一个代码块,没有函数名,只有一行代码
      2. 传入的参数可以有很多,
      3. 返回值只能由一个,不用写return,返回值就是该表达式的结果
    3. 案例

      以map()函数为例,计算f(x)=x2时,除了定义一个f(x)的函数外,还可以直接传入匿名函数:

      list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
      #  [1, 4, 9, 16, 25, 36, 49, 64, 81]
      # 匿名函数赋值
      f = lambda x: x * x
      f
      # <**function** <lambda> at 0x101c6ef28>
      f(5)
      # 25
      # 作为返回值
      def build(x, y):
         return lambda: x * x + y * y
        
      sum = lambda a,b : a*b
      print(sum(7,9))
      
      1. 匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:

      2. 把匿名函数作为返回值返回,比如:

  • filter() 过滤 (lamda)

    1. 对(序列)可迭代对象进行过滤,返回一个迭代器对象。过滤条件为布尔类型的函数,过滤掉的元素是:执行函数结果为0,留下结果为1的函数。

    2. 注意:描述中可迭代对象和序列的描述,输出结果 时要确定对象类型,tumple/list,否返回的是迭代器所在的位置

    3. 语法:filter(function. Iterable)

      function: 用来筛选的函数. 在filter中会自动的把iterable中的元素传递给function. 然后根据function返回的True或者False来判断是否保留留此项数据 , Iterable: 可迭代对象

      def func (i):  # 判断奇数
      
        return i % 2 == 1
      
      lst = [1,2,3,4,5,6,7,8,9]
      
      l1 = filter(func, lst) #l1是迭代器
      
      print(l1) #<filter object at 0x000001CE3CA98AC8>
      
      print(list(l1)) #[1, 3, 5, 7, 9]
      
  • map()

    1. 会根据提供的函数对可迭代对象中的每一个元素进行映射. 分别去执行 function

      将传入的函数依次作用于列表中的的每一个元组,返回一个map对象。

    2. 语法 : map(function, iterable)

      def  f (i):   return  i
      
      lst = [1,2,3,4,5,6,7,]
      
      it = map(f, lst) # 把可迭代对象中的每一个元素传递给前面的函数进行处理. 处理的结果会返回成迭代器print(list(it)) #[1, 2, 3, 4, 5, 6, 7]
      

和作用域相关

  • locals() 返回当前作用域中的名字
  • globals() 返回全局作用域中的名字
def func ():

  a = 10

  print(locals()) # 当前作用域中的内容

  print(globals()) # 全局作用域中的内容

  print("今天内容很多")

func()

\# {
   'a': 10}

\# {
   '__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': 

\# <_frozen_importlib_external.SourceFileLoader object at 0x0000026F8D566080>, 

\# '__spec__': None, '__annotations__': {
   }, '__builtins__': <module 'builtins' 

\# (built-in)>, '__file__': 'D:/pycharm/练习/week03/new14.py', '__cached__': None,

\# 'func': <function func at 0x0000026F8D6B97B8>}

\# 今天内容很多

和迭代器生成器相关

  • range() 生成数据

    • 左闭右开
    • python2返回列表, python3返回迭代器,节约内存
  • next() 迭代器向下执行一次, 内部实际使⽤用了__ next__()⽅方法返回迭代器的下一个项目

  • iter() 获取迭代器, 内部实际使用的是__ iter__()⽅方法来获取迭代器

    for i in range(15,-1,-5):
    print(i)
    
    \# 15
    
    \# 10
    
    \# 5
    
    \# 0
    
    lst = [1,2,3,4,5]
    
    it = iter(lst) # __iter__()获得迭代器
    
    print(it.__next__()) #1
    
    print(next(it)) #2 __next__() 
    
    print(next(it)) #3
    
    print(next(it)) #4
    

字符串类型代码的执行

  • eval() 执行字符串类型的代码. 并返回最终结果

  • exec() 执行字符串类型的代码

  • compile() 将字符串类型的代码编码. 代码对象能够通过exec语句来执行或者eval()进行求值

    s1 = input("请输入a+b:") #输入:8+9
    
    print(eval(s1)) # 17 可以动态的执行代码. 代码必须有返回值
    
    s2 = "for i in range(5): print(i)"
    
    a = exec(s2) # exec 执行代码不返回任何内容
    
    \# 0
    
    \# 1
    
    \# 2
    
    \# 3
    
    \# 4
    
    print(a) #None
    
    \# 动态执行代码
    
    exec("""
    
    def func():
    
      print(" 我是周杰伦")
    
    """ )
    
    func() #我是周杰伦
    
    code1 = "for i in range(3): print(i)"
    
    com = compile(code1, "", mode="exec")  # compile并不会执行你的代码.只是编译
    
    exec(com)  # 执行编译的结果
    
    \# 0
    
    \# 1
    
    \# 2
    
     
    
    code2 = "5+6+7"
    
    com2 = compile(code2, "", mode="eval")
    
    print(eval(com2)) # 18
    
     
    
    code3 = "name = input('请输入你的名字:')" #输入:hello
    
    com3 = compile(code3, "", mode="single")
    
    exec(com3)
    
    print(name) #hello 
    

输入输出

  • print() : 打印输出

  • input() : 获取用户输出的内容

    print("hello", "world", sep="*", end="@") # sep:打印出的内容用什么连接,end:以什么为结尾,end=' '意思是末尾不换行,加空格
    
    \#hello*world@
    

内存相关

​ hash() : 获取到对象的哈希值(int, str, bool, tuple). hash算法:(1) 目的是唯一性 (2) dict 查找效率非常高, hash表.用空间换的时间 比较耗费内存

s = 'alex'print(hash(s)) #-168324845050430382lst = [1, 2, 3, 4, 5]print(hash(lst)) #报错,列表是不可哈希的 id() : 获取到对象的内存地址s = 'alex'print(id(s)) #2278345368944

文件操作相关

  • open() : 用于打开一个文件, 创建一个文件句柄
  • with():with方法帮我们实现了 finally中 f.close.打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open写法,我们需要try, except; final!y,做异常判断,并且文件最终不管遇到什么情况,都要执行 finally ,f.close0关闭文件
    (当然还有其他自定义功能,有兴趣可以研究with方法源码)
f = open('file',mode='r',encoding='utf-8')
try:
  f.read()
except:
  pass
finally:
  f.close()

模块相关

  • __ import__() : 用于动态加载类和函数
# 让用户输入一个要导入的模块

**import** os

name = input("请输入你要导入的模块:")

__import__(name)  # 可以动态导入模块

帮 助

  • Type()

    查询变量所指的对象类型

  • help() : 函数用于查看函数或模块用途的详细说明

  • isinstance :判断对象的类别

print(help(str)) #查看字符串的用途
>>> isinstance('abc', Iterator)
False
>>> isinstance('abc', Iterable)
True

调用相关

  • callable() : 用于检查一个对象是否是可调用的. 如果返回True, object有可能调用失败, 但如果返回False. 那调用绝对不会成功

    a = 10
    
    print(callable(a)) #False 变量a不能被调用
    
    \#
    
    **def** **f**():
    
      print("hello")
    
      print(callable(f))  # True 函数是可以被调用的
    

断言相关

assert

  • assert()

    “断言”是一个心智正常的检查,确保代码没有做什么明显错误的事情。这些心智正常的检查由 assert 语句执行。如果检查失败,就会抛出异常。在代码中,assert语句包含以下部分:
    • assert 关键字;
    • 条件(即求值为 True 或 False 的表达式);
    • 逗号;
    • 当条件为 False 时显示的字符串。

查看内置属性

  • dir() : 查看对象的内置属性, 访问的是对象中的__dir__()方法
print(dir(tuple)) #查看元组的方法

语法结构

1.规范 PEP8

PEP8是 Python Enhancement Proposal 8的缩写,翻译过来就是 Python增强建议书,也就是Python编码规范。例如:缩进,注释,行限字数,每行之间的空行,空格的使用等

2.注释

对代码进行标注,增加可读性.

  1. 单行注释采用 # 开头

    注释可以在语句或表达式行末。实际的应用中会对代码本身注释,不执行进行调试

# 第一个注释
 print "Hello, Python!"; # 第二个注释
  1. 多行注释使用三个单引号(‘’')或三个双引号(“”")。
''' 

这是多行注释,使用单引号。

这是多行注释,使用单引号。 这是多行注释,使用单引号。 

''' 

"""

这是多行注释,使用双引号。 

这是多行注释,使用双引号。 

这是多行注释,使用双引号。 

"""

3.转义字符

定义:可以改变原有字符含义的特殊字符

常用的:

\’ \” \””” \n

\t 水平制表格 \0 空字符 \

4.行和缩进

    • 物理行:程序员编写代码时的行。
    • 逻辑行:python解释器需要执行的指令。 建议一个物理行对应一个逻辑行。

    ​ 示例: print(“ok”); print(“no”) 一个物理行,两个逻辑行。

    • 隐式换行:所有括号的中的内容都可以换行。

      x = 1 + (2+ 3+

    • 显示换行:通过折行符 \ 换行

      x = 1 + 2+ 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值