本文共 3496 字,大约阅读时间需要 11 分钟。
可变 和 不可变类型
不可变:对象所指向的内存中的值改变,内存地址必须改变
不可变类型:int str float tuple
s1='abc'print(id(s1))s1='abcd'print(id(s1))'''23032012828002303205706800'''
可变:地址不变,对象所指向的内存中的值可以改变
可变类型:dict list
list1=[1,2,3,4,5]print(list1,id(list1))list1.pop()print(list1,id(list1))#此处用的是函数,所以内存地址不变。pop是在原地址弹出元素list1=[1,2,3,4,5]print(list1,id(list1))list1=[1,2,3]print(list1,id(list1))#直接赋值还是会变,开辟了一个空间存放相应的数据'''[1, 2, 3, 4, 5] 1838036552832[1, 2, 3, 4] 1838036552832[1, 2, 3, 4, 5] 2131537366144[1, 2, 3] 2131537366272'''
集合
集合可变,冰冻集合不可变
set1 = {1,2,3,4,5}print(set1,id(set1))set1.discard(5)print(set1,id(set1))fset = frozenset(set1)print(fset,id(fset))fset=frozenset({3,6})print(fset,id(fset))'''{1, 2, 3, 4, 5} 2171726812768{1, 2, 3, 4} 2171726812768frozenset({1, 2, 3, 4}) 2171726811872frozenset({3, 6}) 2171726813440'''
浅拷贝与深拷贝? 什么情况下会开辟新内存地址存储数据
类型转换
str() int() list() dict() set() tuple()
str--->int,list,set,tuple,dict,float 反过来也可以 int,list,set,tuple,dict,float--->str
list--->set(),tuple() [(key,value),(key,value),...]形式的列表可以转成字典
tuple,set--->list
dict1 = {1:'a',2:'b'}print(list(dict1))'''[1, 2]'''
——————分割线——————
pycharm
site-packages:通过pip安装和管理的东西
创建一个新项目:File--->New Project--->选择位置
venv:虚拟环境
每个项目用到的库不一样,为了库与库之间不冲突(如:项目依赖的包的版本不一样),一个项目用一个单独的扩展第三方库(放在虚拟环境中)
刚开始学时用不到库,可以勾选Previously configured interpreter,节省磁盘空间
创建python文件
如上图,右键first项目--->new--->Python File--->命名--->回车,创建完成
调整字体大小
File--->Settings--->搜索font--->更改Size
更改文件名字
右键要修改名字的文件--->Refactor--->Rename
补:
File--->Settings--->Keymap可以设置快捷键
File--->Open/Open Recent 切换项目
pycharm常用快捷键
###Shift +enter 添加一行 ###Ctrl + / 行注释注释
1.单行注释 #
2.多行注释
'''
'''
注释的作用
1.不让解释器执行注释的那句话
2.代码说明,辅助开发
###Tab / Shift + Tab 缩进、不缩进当前行 ###Ctrl + D 复制选定的区域或行 ###Ctrl + Home 第一行,Ctrl+End 最后一行 ###ctrl+g 弹出一个框,输入要跳的行数项目往往包括很多包,python package
有问题会报红线, Alt+Enter(回车) 快速提醒,给出红色波浪线报错解决办法
双击可以将代码全屏,再双击返回
当前项目依赖的解释器
点+号可以添加扩展包,默认显示最高版本,也可以选择指定版本号,点Install Package就会开始下载
-号就是uninstall
——————分割线——————
科研就是寻找极限
函数: 解决重复使用的代码,将其封装在函数里
比喻:超市的火锅底料,不用自己去一步步做,直接用现成调好的
作用:函数可以增强代码的模块化和提高代码的重复利用率,减少代码冗余
导入函数时写在最前面
定义函数:
格式:
def 函数名(参数,参数,...):
函数体(重复的代码)
注意:1、必须使用关键字def 2、函数体注意缩进 3、函数名紧跟小括号(必须有),参数可以没有
函数名命名规则类似于变量
不符合PEP8编码规范会有黄色波浪线
tip: 自动格式化快捷键 Ctrl+Alt+L
光标放到波浪线上,会提示快捷键
import randomdef generation_random(): for i in range(10): ran = random.randint(1, 20) print(ran)print(generation_random) # 打印函数名# 调用:函数名() 找到并执行函数体内容 括号表示调用print('-'*20)generation_random()print('-'*20)generation_random()'''函数 函数名 在 内存地址'''#内存地址和generation_random绑定
debug历史:虫子在屏幕上挡住了错误的地方,所以是去除虫子
调试窗口:
#求随机数的个数,产生的个数未定import randomdef generation_random(num): #形参,形式上的参数,用于占位,函数体内部和外界的通道 for i in range(num): ran = random.randint(1,20) print(ran)print(generation_random)#generation_random() #实参,具体的值#TypeError: generation_random() missing 1 required positional argument: 'num'generation_random(5)generation_random(8)
tip:单击代码行左侧设置断点
练习1:求加法的函数
def add(a,b): #两个形参 result = a+b print('和:',result)#调用add(2,3) #两个实参'''和: 5'''
练习2:定义一个登录函数,参数是:username,password
函数体: 判断参数传过来的username,password是否正确,如果正确则登录成功否则打印登录失败#函数的定义def login(username,password): uname='admin' pwd='123' #数据库保存的注册过的用户名和密码 for i in range(3): if username==uname and password==pwd: print('登录成功!') break else: print('登录失败!') username = input('请输入用户名') password = input('请输入密码') else: print('账户锁定')#函数的调用username = input('请输入用户名')password = input('请输入密码')login(username,password)
转载地址:http://izegn.baihongyu.com/