python——基础排坑+经验总结(持续更新)

python——基础排坑+经验总结(持续更新)

一、可变数据类型与不可变数据类型的坑

  • 可变数据类型

    int(整数),string(字符串),float(浮点型)

    a=1
    b=1
    # 这里a与b的地址是一样的(我们可以打印看一下)
    print(id(a))
    print(id(b))
    # 当a=2时,地址将会变化
    a=2
    print(id(a))
    ###
    #原因:
    #万物皆对象---python是将指针指向 数据对象
    #当数据更改时,python创建一个对象,将指针指向新的对象即可
    #(这是地址改变的原因,而不是对原有值进行修改)
    

在函数中的调用也是一样!

a = 1

def test(a):
	a = 2

#这里a中在函数中改变了,但是当函数结束后,全局变量a是不会变的,地址也不会变

  • 不可变数据类型

    list(列表),dict(字典),tuple(元组)

    # 当引用到函数内,修改value,全局的数据类型也会改变!
    
    a = [0,1,2]
    
    def test(a):
    	a.append(3)
    	
    test(a)
    print(a)
    

注意:这就是为什么在许多函数内,当作者想要使用不可变数据类型时,而且函数内会将变量修改时,但是不想修改全局变量时,就会拷贝一份,再对拷贝出来的变量进行操作!

#这里进行举例:
a = [0,1,2]

def test(a):
	b = a.copy()
	b.append(3)
	return b

b = test(a)
print(a)
print(b)

二、数据类型的方法使用问题

  • 为什么可以在数据类型后面加上.get()或.append()方法?

    因为这些数据类型的父类中,已经创建了这些方法,所以创建出来的实例,可以也具有这些方法

    my_list = [0,1,2]    #  实例化
    
    def test(a):
    a.append(3)  # .append()就是继承了父类的方法!
    
    test(my_list) 
    print(my_list)   
    

三、类的self问题

class studentInfo:
    school = 'No.1'       # 类属性
    def __init__(self, name, age):
        self.name = name  # 实例属性
        self.age = age
    
        
stu_1 = studentInfo('小明', 20)

# self表示类创建的实例/对象本身

# 当 stu_1 实例化时,调用__init__初始化方法,需要将实例传入!
# 所以其中的self就是指实例!
# 方法内的语句也就顺理成章了!
# 即可看为: 
# self.name = name  等于 stu_1.name = name

四、python解释器的冲突问题

问题描述:

电脑上有手动下载的python3.9与Anaconda自带的python解释器,当需要使用python3.9时,系统使用的是Anaconda自带的python解释器!

寻找问题:

pip list命令中查看到,明明有第三方库,但还是报错找不到!

ImportError: Couldn't import Django.

发现问题:

查看使用的python环境【发现是两个python环境冲突!】

  • 方法一:
    在这里插入图片描述

  • 方法二:
    在这里插入图片描述

    执行命令:

     & 'D:\Program Files\Python39\python.exe' .\manage.py runserver 0.0.0.0:8081
    

五、python导包问题

在这里插入图片描述

情境引入:

如上图所示,当自己写了两个view.py文件,需要在main.py导入myapp中的view.py

问题描述:

当在main.py中写入

import view 

发现view文件中没有我们之前设置的方法!

问题发现:

通过view的方法查看,原来是导入了与myapp同级目录的view.py文件

问题分析:

python解释器找包是从外向内找!

1、首先从python内置库文件中找

2、如果没有,则去项目文件中,从主目录一层一层往下找!

解决方法:

指定导入位置即可:

from . import view   # 指定导入同级目录中的view.py文件
from project import view   # 指定导入同级目录中的view.py文件

总结:因为不了解导包机制,所以造成了错误!唉,基础不牢,地动山摇啊!


六、python版本与pip下载问题

情境引入:

当时同学跑一个项目,用pycharm打开项目后,需要下载一个库

但是需要3.7版本的python,而他是3.8版本的,为了防止版本冲突和其他的不确定因素,他删掉3.8版本,下载了3.7版本

ps:【有时pip下载报错,是因为pip过低导致!】

问题描述:

然后再去下载库

但是,当他执行pip命令时:

pip install xxx

pip报错了

问题发现:

1、先把之前那些版本的pip版本删除,然后重新执行命令,还是不行!

2、在cmd中输入:

pip -V

查看到pip的来源是该项目的虚拟环境!【venv即是pycharm创建的虚拟环境】
在这里插入图片描述

3、而我们想要的是python3.7版本自己的pip版本

解决方法:

将虚拟环境删掉【即:删掉venv文件】,再配置我们自己下载的python3.7版本就可以了!

总结: 当下载出错的时候,用pip -V 查看这个pip是来自哪里的,想想是不是我们想要配置的路径!


附:开发经验

一、在写判断语句的时候,可以将常量写左边,变量写右边

【因为如果不小心写成了赋值语句,编译器是可以判断出来的】

例如:if(i=0)对比if(0=i)

二、在写死循环的时候,可以写while(1 == 1),或需要测试某一个代码段时,可以写if(1 == 1)

当不需要执行的时候,把1改为0,就可以了!

如果是while(ture),还需要改成while(false)才可以!

猜你喜欢

转载自blog.csdn.net/Pan_peter/article/details/126507304