Python变量
1 注释
1.1 什么是注释
- 用于解释代码
- 机器不去执行注释内容
- 注释一般用自然语言书写
1.2 注释的写法:
- 行注释: 以井号(#)开头,可以单独行,也可以在某行代码后边
- 块注释: 以三个连续单引号或双引号开始和结束
1.3 注释的例子
print("hello world") #打印 hello world
2 变量
2.1 什么是变量
- 变量是可以重复使用的一个量,或者是一个代号
2.2 变量的命名规则
- 变量命名可以包含数字,大小写字母,下划线或者更多
- 命名方式[推荐]
- 使用具有固定含义的英文单词或者缩写
- 驼峰命名法
- 大驼峰命名法: 每个单词第一个字母均大写。如: MyFirsCode, IntOne
- 小驼峰命名法: 第一个字母小写,其他需要大写。如: myFirstCode, intOne
- 多个单词用下划线链接: 单词全部小写。如: my_first_code, int_one
- 注意事项
- 变量命名必须避开系统关键字。如: class, def, break,for等
- 不以数字开头
- 以下划线开头的变量具有特殊含义,不建议使用
- 区分大小写
# 定义变量age,把数字25写入变量age
age = 25
print(age)
# 给x1, x2, x3 写入同一个内容或值
x1 = x2 = x3 = 25
print(x1)
print(x2)
print(x3)
# 给多个变量赋值
x4, x5, x6 = 3, 6, 9
print(x4)
print(x5)
print(x6)
2.3 变量类型
一共六种: 数字类型(Number)、字符串类型(str)、列表(list)、元组(tuple)、字典(Dictionary)以及集合(set)
2.3.1 数字类型(Number)
数字类型没有大小限制
-
整数
- 没有小数部分,表示个数的数字
- 自然数,0,负自然数
- 整数分进制
- 二进制
计算机常用,是计算机唯一能直接理解的数字
表示为0b开头的0,1代码。例如: 0b01101, 0b10001 - 八进制
不常用,以0o开头的包含0-7的数字 - 十六进制
缝16进1, 其实是每四位二进制表示一位十六进制数
包含0-9, a-f。数字上以0x开头表示 - 十进制
日常使用。如: 18, 89, 178
- 二进制
-
浮点数
-
可以包含小数
-
计算机里边表示浮点数可以有条件省略
-
科学计数法
定义跟数学定义
写法是用e/E后面跟整数表示10的指数
-
height = 177.34
print(height)
likehood = .2
print(likehood)
-
复数
定义同数学定义一致
一个由实部和虚部构成的数字 -
布尔值
表示真假的值
只有两个值, True/False
布尔值可以跟数字直接操作
2.3.2 字符串类型(str)
用来表示一串文字信息
- 如何表示
单引号
双引号
三引号(三个单引号或者三个双引号)
x1 = "i love coding"
print(x1)
x2 = "我爱编程"
print(x1)
x3 = '''
每天学习
学好python
'''
print(x3)
a 转义字符
- 用一个特殊的方法表示出一系列不方便写出的内容,比如: 回车键,换行键,退格键
- 借助反斜杠字符,一旦字符串中出现反斜杠(),则反斜杠后面一个或几个字符表示已经不是原来的意思了,进行了转义
- 在字符串中,一旦出现反斜杠就要加倍小心,可能由转义字符出现
- 不同系统对换行操作有不同的表示
windows Mac: \n
Linux: \r\n
# 如果想表示出Let‘s go来
# 1. 可以使用嵌套引号,即外层使用双引号
# 2. 转义字符
s1 = "Let's go"
print(s1)
# \' 相当于 '
s2 = 'Let\'s go'
print(s2)
# \\ 相当于 \
s3 = "c:\\user"
print(s3)
# \n 相当于 回车换行符
s4 = "I like \n coding"
print(s4)
b 字符串的格式化
- 把字符串按照一定格式打印或者填充
- 格式化有两种方法
利用百分号(%)
利用 format 函数
利用百分号(%)
-
在字符串中,利用%表示一个特殊的含义,表示对字符进行格式化
-
%d: 此处应该放入一个整数 (%d此时是一个占位符)
-
%s: 表示此处应该放入一个字符串(%s此时是一个占位符)
-
详细规则:
%s: 字符串 %r: 字符串,但是是使用repr而不是str %c: 整数转换成单个字符 %d: 十进制整数 %u: 无符号整数 %o: 表示八进制 %x: 表示十六进制,字母为小写(x为小写) %X: 表示十六进制,字母为大写(X为小写) %e: 浮点数(e为小写) %E: 浮点数(E为大写) %f,%F: 浮点数十进制形式 %g,%G: 十进制形式浮点或者指数浮点自动转换 格式字符前面出现整数表示此占位符所占位置的宽度 格式字符前边出现‘-’,表示左对齐 格式字符前边出现‘+’,表示右对齐 0位数不足用‘0’补齐 width表示宽度 pricision表示精度
# %s: 表示此处应该放入一个字符串
print("I love %s" % "coding")
# %d: 此处应该放入一个整数
print("I am %d years old"%18)
# 如果出现多个占位符,则相应内容需要用括号括起来
s = "I am %s, i am %d years old"
print(s%("tulingxueyuan", 18))
利用 format 函数
- 直接用format函数进行格式化
- 推荐使用这种方法
- 在使用上,以{}和:代替%号,后面用format带参数完成
s1 = "I love {}".format("coding")
print(s1)
s2 = "Yes, i am {1} years old, I love {0} and i have {1} books".format("coding", 18)
print(s2)
# 不用指定位置,按顺序读取
# 方式1
s = "{} {}!"
print(s.format("hello","world"))
# 方式2
s = "{} {}!".format("hello", "world")
print(s)
# 设置指定的位置
s = "{0} {1}!".format("hello", "world")
print(s)
# 设置指定的位置
s = "{1} {0}!".format("hello", "world")
print(s)
# 设置指定的位置
s = "i am {0} and {0} is me!".format("阿杰")
print(s)
# 命名参数
s = "我们的是{school_name},我们的网址是{url}, {student}最可爱"
s = s.format(school_name = "xxx大学", url = "www.xxx.com", student = "阿杰")
print(s)
# 通过字典设置参数,需要解包
# 命名参数
s = "我们的是{school_name}, 我们的网址是{url}, {student}最可爱"
s_dict = {"school_name":"xxx大学", \
"url" : "www.xxx.com", \
"student" : "阿杰"}
# **是解包操作,后面会讲到
s = s.format(**s_dict)
print(s)
c 内置函数
-
分类(常见):
-
字符串查找类
find:查找字符串中是否包含子串 index: 跟find的唯一区别是index如果找不到会引发异常 lfind,rfind:从左开始查找/从右开始查找
-
字符串判断类
-
此类函数的特点是一般都用is开头,如:islower
isalpha:判断是否是字母,需要注意的是两点: 此函数默认的前提是字符串至少包含一个字符,如果没有,同样返回False 汉字被认为alpha,所以,此函数不能作为区分英文字母还是汉字的标识,区分中英文使用unicode码 注意使用区别,防止被坑 isdigit, isnumeric,isdecimal三个判断数字的函数 此类函数不建议使用,在后期爬虫中,判断是否是数字建议采用正则表达式的方式 isdigit() True:Unicode数字,byte数字(单字节),全角数字(双字节), 罗马数字 False:汉字数字 Error:无 isnumeric() True:Unicode数字,全角数字(双字节),罗马数字,汉字数字 False:无 Error:byte数字(单字节) isdecimal() True:Unicode数字,全角数字(双字节) False:罗马数字,汉字数字 Error:byte数字(单字节)
-
-
内容判断类
startswith/endswith: 是否以xxx开头或者结尾 检测某个字符串是否以某个子串开头,常用三个函数 suffix:被检查的字符串,必须有 start:检查范围的开始范围 end:检查范围的结束范围 islower/issupper: 判断是否是大写或者小写
-
操作类
format:格式化用的 Strip:这个函数主要作用是删除字符串两边的空格,其实这个函数允许你去定义删除字符串两边的哪个字符,只不过如果不指定的话默认是空格。同样还有lstrip和rstrip,此处l和r分別表示左边右边,即删除字符串左边或者右边制定字符,默认空格。需要注意的是,此处的删除不是删除一个,是指从头开始符合条件的连续字符. lstrip和rstrip join: 这个函数主要对字符串进行拼接。它需要一个可以迭代的内容作为参数(迭代的概念后面介绍,此处暂时理解成一个列表),功能是把可迭代的字符串拼接在一起,中间使用调用字符串作为分隔符。
# find()函数
s = "Jay is a student"
s1 = 'student'
# 返回第一次出现字符串'student'的位置
s.find(s1)
s2 = "xiaohei"
# 返回第一次出现字符串'xiaohei'的位置
print(
s.find(s2)
)
# index()函数
a = "Jay is a student,he like his life."
a1 = "he"
# 返回第一次发现这个字符串的位置
print(
a.index(a1)
)
# index()函数
# index会报错或者引发异常
a = "Jay is a student,he like his life."
a1 = "hate"
print(
a.index(a1)
)
# 字符串判断类
# isalpha函数
s1 = "大海啊,大海!"
s2 = "i am Jay"
s3 = "long time no see"
print(s1.isalpha())
print(s2.isalpha())
print(s3.isalpha())
# startswith()函数
# endswith()函数
s1 = "xiao hei"
s2 = "dou dou"
s = "xiao hei often bite dou dou"
print(s.startswith(s1))
print(s.endswith(s2))
# islower()函数
# isupper()函数
s1 = "Jay is a student"
s2 = "Jayisastudent"
s3 = "jayisastudent"
# s4包含空格,但空格并不影响结果,忽略
s4 = "jay is a student"
s5 = "阿杰是一个学生"
print(s1.islower())
print(s2.islower())
print(s3.islower())
print(s4.islower())
print(s5.islower())
print(s5.isupper())
c = "jjay is a student "
# 是否成功删除两边空格不能观察出来
print(c.strip()) # 删除两边空格
print('*'*20)
print(c.strip("j")) # 删除两边的j
# join函数
# s1, s2, s3 作为分隔符,把ss的内容拼接在一起
s1 = "$"
s2 = "-"
s3 = " "
ss = ['jay','is', 'a', 'student']
print(s1.join(ss))
print(s2.join(ss))
print(s3.join(ss))
3.4 变量作用域
-
变量由作用范围限制
-
分类:按照作用域分类
- 全局(global): 在函数外部定义
- 局部(local):在函数内部定义
-
变量的作用范围:
- 全局变量:在整个全局范围都有效
- 全局变量在局部可以使用(即函数内部可以方位函数外部定义的变量)
- 局部变量在局部范围可以使用
- 局部变量在全局范围无法使用
-
LEGB原则
L(Local)局部作用域 E(Enclosing function locale)外部嵌套函数作用域 G(Global module)函数定义所在模块作用域 B(Building): python内置模块的作用域
# 认为a1是全局的
a1 = 100
def fun():
print(a1)
print("I am happy")
# a2的作用范围是fun函数内
a2 = 99
print(a2)
print(a1)
fun()
print(a2) # a2将会报错,因为未定义
# 解释了"全局变量"和"局部变量"的区别:从内往外访问可以,从外往内访问不可以。
- 提升局部变量为全局变量
def fun():
global b1
b1 = 100
print(b1)
print("I am happy")
# a2的作用范围是fun
b2 = 99
print(b2)
fun()
print(b1)
- globals, locals函数
- 可以通过globals和locals显示出局部变量和全局变量
# globals 和 locals
# globals 和 locals 叫做内建函数
a = 1
b = 2
def fun(c,d):
e = 111
print("Locals={0}".format(locals()))
print("Globals={0}".format(globals()))
fun(100, 200)
3.5 传值和传地址的区别
- 对于简单的数值,采用传值操作,即在函数内对参数的操作不影响外面的变量,好比将书的一页复印下,看复印页
- 对于复杂变量,采用传地址操作,此时函数内的参数和外部变量是同一份内容,好比大家共看一本书
- 任何地方对此内容的更改都影响另外的变量或参数的使用
def a(n):
n[2] = 300
print(n)
return None
def b(n):
n += 100
print(n)
return None
an = [1,2,3,4,5,6] #传址
bn = 9 #传值
print(an)
a(an)
print(an)
print(bn)
b(bn)
print(bn)
目录
上一篇:chap1-01 python概述
下一篇:chap1-03 python表达式
本次笔记来自于“免费Python全系列教程全栈工程师”的学习