python语法基础 — chap1-02 python变量

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全系列教程全栈工程师”的学习

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值