您当前的位置: 首页 >  Python

wespten

暂无认证

  • 0浏览

    0关注

    899博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python入门之设置环境变量与缩进

wespten 发布时间:2022-07-05 15:49:07 ,浏览量:0

一、python安装

windows10下,直接在Microsoft Store中输入python,即可下载安装。

安装完毕:

不管Windows还是linux,在终端里输入python,打开python后输入如下命令,即可获得python默认安装路径。

sys.executable是当前Python解释器(或者其他Python实现)的路径。

也可以通过如下命令,查看python的绝对路径:

  二、Python环境变量设置

无论是在Windows系列的操作系统中还是在Linux系列的操作系统中,都会涉及到环境变量这一概念,那么什么是环境变量呢?所谓环境变量是指在操作系统中用于设置操作系统运行环境的一些参数,它是操作系统中一个具有特定名称的对象,其内部包含了一个或多个应用程序启动时或者运行时可能需要的信息。例如Windows操作系统中大家经常听说的的Path环境变量,当我们在Windows的cmd窗口中运行一个程序但没有写出程序的完整路径时,操作系统除了在当前目录下查找目标程序外,还会到环境变量Path所包含的路径中去查找,直到查找到目标程序或者所有路径查找完毕。操作系统中的环境变量又分为用户级环境变量和系统级环境变量。

1.用户级环境变量:只有当前登录的用户才可调用,类似于局部变量。如果操作系统中有多个用户,则每个用户只能调用自己独有的和操作系统公有的环境变量,而不能调用其他用户独有的环境变量。

2.系统级环境变量: 本操作系统中的所有用户均可调用,类似于全局变量。

对于普通环境变量,用户级环境变量的优先级高于系统级环境变量的优先级。如果我们在用户级环境变量与系统级环境变量中同时创建一个同名变量PYTHONPATH,那么Win10操作系统会优先使用用户级的环境变量.

为什么要设置Python3相关的环境变量?

主要原因为下面的2个:

1.为了确保我们在Win10的cmd窗口中输入python或者conda的时候操作系统能够正常找到并打开我们的Python3解释器或者conda软件,我们必须将Python3解释器或者conda软件的完整路径添加到Path环境变量中。

2.可能已经接触过Python编程的朋友们都知道,我们在编写Python程序的时候经常会导入一些别人已经编写好的Python模块或者Python包,这些别人为我们编写好的Python模块或者Python包统称为第三方模块或者包,如果我们不将第三方模块或者包安装到Python3解释器的搜索路径中,则我们导入它们的时候Python3解释器将无法找到,最终报模块或者包导入失败。

导入自定义的Python3模块相关的环境变量的名称为PYTHONPATH,它的值是一个用于存放我们自定义的Python3模块的文件夹,我们可以手动永久设置,这样每次Python3解释器重启之后都可以自动找到我们存放自定义Python3模块的文件夹,不用每次启动解释器都设置,建议将PYTHONPATH设置为系统级别的环境变量。

 搜索环境变量:

 在系统变量中新建“Python_HOME"输入上面查询到的python默认安装路径,一层层点确定。

在系统变量中"Path’中添加输入"%Python_HOME%"点击确定。这样环境变量就好了。

对于Path环境变量,Win10操作系统是将用户级的Path环境变量追加到系统级的Path环境变量的后面。因为Windows操作系统在查找指令的时候,是按照Path环境变量中的路径从前往后查找,直到在某个路径下找到了目标指令,因此,如果系统级Path环境变量中有目标指令,则Windows不会再去用户级Path环境变量中查找目标指令,这一点Path环境变量与其它普通环境变量刚好相反。

当我们将文件夹D:\AnZe\DyPy3Module动态添加到Python3解释器的模块查找路径中之后,程序运行之后将得到如下图8所示的结果,可以从图8中发现sys.path中已包含D:\AnZe\DyPy3Module文件夹。

向Python3解释器的模块查找路径中动态添加存放自定义Python3模块的文件夹的方法只能临时修改Python3解释器的模块查找路径,无法永久修改Python3解释器的模块查找路径,而PYTHONPATH环境变量可以永久修改Python3解释器的模块查找路径。

假设我们自定义了一个如下图9所示的ImportModuleTest.py模块并保存在D:\AnZe\DyPy3Module文件夹中。

当我们没有将文件夹D:\AnZe\DyPy3Module动态添加到Python3解释器的模块查找路径中之前,如果导入ImportModuleTest.py模块,则程序运行之后将得到如下图11所示的结果,可以从图11中发现import ImportModuleTest模块失败。

当我们将文件夹D:\AnZe\DyPy3Module动态添加到Python3解释器的模块查找路径中之后,如果导入ImportModuleTest.py模块,则程序运行之后将得到如下图所示的结果,可以从图中发现import ImportModuleTest模块成功。

三、python缩进

Python不像其他程序设计语言(如Java或者C言语)采取括号“{}”分隔代码块,而是采用代码缩进和冒号“:”区分代码之间的层次。

Python是使用缩进来区分不同的代码块,所以对缩进有严格要求。缩进可以使用空格键或者 < Tab > 键实现。使用空格键时,通常情况下采用4个空格作为一个缩进量,而使用< Tab >键时,则采用一个< Tab >键作为一个缩进量。通常情况下建议采用空格进行缩进。

1、缩进不符合规则,解析器会报缩进错误,程序无法运行。

 2、缩进的不同,程序执行的效果也有可能产生差异。

例如图中的代码,左边代码会打印第2行,而右边代码,1,2行都不打印

代码缩进规则:

缩进是针对逻辑行的,因此首先要区分代码中的物理行和逻辑行。

物理行:代码编辑器中显示的代码,每一行是一个物理行。

 逻辑行:Python解释器对代码进行解释,一个语句是一个逻辑行。

python代码中

1、可以使用";"号将多个逻辑行合并成一个物理行。

**这里有个前提,多个逻辑行应该属于同一个代码层级。

像这种分支else代码块就不能直接使用“;”连接了。

if True:a=1; else: a=2

2、可以使用"\"对一个逻辑行进行换行,书写为多个物理行。

3、字典、列表等变量赋值语句,是可以直接换行,书写为多个物理行的。

 缩进规则

1、逻辑行的“首行”需要顶格,即无缩进(也就是一份源码的第一个逻辑行)

 2、相同逻辑层(同一个代码块)保持相同的缩进量

 3、":"标记一个新的逻辑层

如:while循环、if分支、函数声明、类定义等等

增加缩进表示进入下一个代码层

减少缩进表示返回上一个代码层

缩进量及缩进字符

Python可以使用空格或制表符(tab符)标记缩进。缩进量(字符个数)不限。

空格tab符通常都以空白形式显示,混用不容易区分,影响代码阅读,增加维护及调试的困难。因此 Python PEP8 编码规范,指导使用4个空格作为缩进。

实际开发,代码规模较大,缩进深度的影响,会选择2个空格做为缩进,更易于阅读。

python是一种对缩进非常敏感的语言,最常见的情况是tab和空格的混用会导致错误,或者缩进不对,而这是用肉眼无法分别的。

将def 前面的空格去掉,然后对print做下tab空格,问题就解决了,如下图:

在编译时会出现这样的错IndentationError:expected an indented block说明此处需要缩进,你只要在出现错误的那一行,按空格或Tab(但不能混用)键缩进就行。

往往有的人会疑问:我根本就没缩进怎么还是错,不对,该缩进的地方就要缩进,不缩进反而会出错

if xxxxxx:

(空格)xxxxx

或者

def xxxxxx:

(空格)xxxxx

还有

for xxxxxx:

(空格)xxxxx

一句话 有冒号的下一行往往要缩进,该缩进就缩进。

对```“tab符和空格可以混用”```如果有疑虑,关键还是没有理解逻辑层或代码块。这里说的```“可以混用”```是有前提的,准确的说是,不同的逻辑层,可以使用不同的缩进符。

在Python中,对于类定义、函数定义、流程控制语句,以及异常处理语句等,行尾的冒号和下一行的缩进表示一个代码块的开始,而缩进结束,则表示一个代码块的结束。

例如,下面代码中的缩进即为正确缩进。

height = float(input("请输入您的身高:"))  # 输入身高
weight = float(input("请输入您的体重:"))  # 输入体重
bmi = weight / (height * height)  # 计算BMI指数

# 判断身材是否合理
if bmi < 18.5:
    print("您的BMI指数为:" + str(bmi))  # 输出BIM指数
    print("体重过期")

if bmi >= 18.5 and bmi < 24.9:
    print("您的BMI指数为:" + str(bmi))  # 输出BIM指数
    print("正常范围,注意保持")

if bmi >= 24.9 and bmi < 29.9:
    print("您的BMI指数为:" + str(bmi))  # 输出BIM指数
    print("体重过重")

if bmi >= 29.9:
    print("您的BMI指数:" + str(bmi))	# 输出BIM指数
    print("肥胖")

Python对代码的缩进要求非常严格,同一个级别的代码块的缩进量必须相同。如果不采取合理的代码缩进,将抛出SyntaxError错误,如图所示:

四、python demo练习

1. Python3的程序是可以动态新增、查看、删除操作系统的环境变量的,具体代码如下所示。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os

# 新增环境变量“email”
os.environ['email']="348834851@qq.com"
# 查看环境变量email的方法1
print(os.environ.get('email'))
# 查看环境变量email的方法2
print(os.getenv('email'))
# 删除环境变量email的方法
del os.environ['email']

# 查看操作系统中常用环境变量的方法
# 查看当前用户主目录
print(os.environ['HOMEPATH'])
# 查看临时目录路径
print(os.environ['TEMP'])
# 查看系统主目录
print(os.environ['SYSTEMROOT'])
# 查看机器名称
print(os.environ['LOGONSERVER'])

2. 通过 python 修改 HOSTS 文件加速github

需要查询的地址

 # 基本地址
 'github.com',
 'gist.github.com',
 'assets-cdn.github.com',
 'raw.githubusercontent.com',
 'gist.githubusercontent.com',
 'cloud.githubusercontent.com',
 'camo.githubusercontent.com',
 'avatars0.githubusercontent.com',
 'avatars1.githubusercontent.com',
 'avatars2.githubusercontent.com',
 'avatars3.githubusercontent.com',
 'avatars4.githubusercontent.com',
 'avatars5.githubusercontent.com',
 'avatars6.githubusercontent.com',
 'avatars7.githubusercontent.com',
 'avatars8.githubusercontent.com',
 'avatars.githubusercontent.com',
 'github.githubassets.com',
 'user-images.githubusercontent.com',
 'codeload.github.com',
 'favicons.githubusercontent.com',
 'api.github.com'

通过python脚本获得地址:

#!/usr/bin/env python
# coding:utf-8
import socket
def output_hosts():
    domains=['github.com',
                 'gist.github.com',
                 'assets-cdn.github.com',
                 'raw.githubusercontent.com',
                 'gist.githubusercontent.com',
                 'cloud.githubusercontent.com',
                 'camo.githubusercontent.com',
                 'avatars0.githubusercontent.com',
                 'avatars1.githubusercontent.com',
                 'avatars2.githubusercontent.com',
                 'avatars3.githubusercontent.com',
                 'avatars4.githubusercontent.com',
                 'avatars5.githubusercontent.com',
                 'avatars6.githubusercontent.com',
                 'avatars7.githubusercontent.com',
                 'avatars8.githubusercontent.com',
                 'avatars.githubusercontent.com',
                 'github.githubassets.com',
                 'user-images.githubusercontent.com',
                 'codeload.github.com',
                 'favicons.githubusercontent.com',
                 'api.github.com'
                 'github.global.ssl.fastly.net'
                 ]

    with open('hosts.txt', 'w') as f:
         f.write('```\n')
         f.write('# GitHub Start \n')
         for domain in domains:
             print('Querying ip for domain %s'%domain)
             ip = socket.gethostbyname(domain)
             print(ip)
             f.write('%s %s\n'%(ip, domain))
         f.write('# GitHub End \n') 
         f.write('```\n')
         
         
     
if __name__ == '__main__':
     output_hosts()

执行python脚本:

host 文件映射修改

Windows系统:修改C:\Windows\System32\drivers\etc\hosts文件

# 网络刷新
 ipconfig /flushdns

Linux系统:修改C:\Windows\System32\drivers\etc\hosts文件

 # 网络刷新
 systemctl restart network
  • 可通过访问https://www.ipaddress.com/,查询网址实际地址

关注
打赏
1665965058
查看更多评论
立即登录/注册

微信扫码登录

0.0396s