python基础语法总结

python基础语法大总结

第一章: print 函数与变量

1.多种引号的用法

1.没有引号:==直接打印所输入值。
不过!!!
仅限于数字及其运算

话不多说上代码:

print520>520

2.单引号:
很简单,一句话!!!
输入什么打印什么

print'数码宝贝'>数码宝贝

3.双引号:
一般在有单引号的情况下为了不混淆而使用

print("Let's play")

4.三引号:
常用来分段

print('''好心情才会有好风景,
好眼光才会有好发现,
好思考才会有好主意。
''')
>好心情才会有好风景,
>好眼光才会有好发现,
>好思考才会有好主意。

5.转义字符
其实,还有第二种实现换行的办法:使用转义字符\n,
比如,像这样!!!

print(''好心情才会有好风景,\n
好眼光才会有好发现,\n
好思考才会有好主意。
'')

好心情才会有好风景,
好眼光才会有好发现,
好思考才会有好主意。

除此之外,还有一些其他的转义字符总结:

在这里插入图片描述

2.变量与赋值规范

在变量的命名种一般要规范命名,以便以后的代码理解起来较为容易理解
赋值一般为‘=’,而“==”是等于的意思

比如:
name=‘小千代’
number=1200
age=18

第二章:数据类型与转换

1.数据类型

看图!!!
在这里插入图片描述

2.类型的转换

在这里插入图片描述

举个例子:

#str()
who = '我的'
action = '是'
destination = '暗盒'
number = 140143
code = '密码'

print(who+destination+code+action+'140143')
>我的暗盒密码是140143
print(who+destination+code+action+str(number))
>我的暗盒密码是140143

注意

不过对于int()函数的使用,大家要注意一点:只有符合整数规范的字符串类数据,才能被int()强制转换。
别看它虽然只有一句话,但它其实带有三层含义:首先,整数形式的字符串比如’6’和’1’,可以被int()函数强制转换。
其次,文字形式,比如中文、火星文或者标点符号,不可以被int()函数强制转换。
最后,小数形式的字符串,由于Python的语法规则,也不能使用int()函数强制转换。

#int()
print(int('3.8'))
# 运行后显示结果:ValueError:invalid literal for int() with base 10: '3.8'
小数形式的字符串,由于Python的语法规则,也不能使用int()函数强制转换。
-----------------------------------------------------------------------
a=110.6
printint(a))
>110
#float()
!!!常见于将数字转化为小数形式

height = 188.0
weight = 180.0
age = '89'

print(height)
print(weight)
print(float(age))

  • 补充一下,数据类型的查询

在这里插入图片描述

a=100
printtype(a))
<class 'int'>

-------------------------
name='小帅'
printtype(name))
<class 'str'>
--------------------------
number=16.52
print(type(number))
<class 'float'>

第三章: 条件判断与条件嵌套

1.条件判断

大体上可以分为三种形式

  • 单向判断`
age=18
if age>=18:
print('你已经是个大人了'
  • 双向判断
age=11
if age>=18:
	print('你已经是个大人了')
else:
	print('要好好学习吖!')

  • 多向判断
age=6
if age>=18:
	print('你已经是个成年的大人了')
else 12<age<18:
	print('加油吧!少年')
elif:
	print('小学生?')
	

2.条件嵌套

简单地说,就是分成不同的代码组来完成任务
在这里插入图片描述

第四章:input函数

输入函数------本质上是一种交互性函数。
输入函数的常注意点
赋值、返回值的属性及其转换
在这里插入图片描述

在这里插入图片描述

第五章:列表和字典

先说列表
首先,我们来看看列表(list)的代码格式:
在这里插入图片描述
图中的 [‘小明’,‘小红’,‘小刚’] 就是一个列表。
一个列表需要用中括号 [ ] 把里面的各种数据框起来,里面的每一个数据叫作“元素”。每个元素之间都要用英文逗号隔开。
这就是列表的标准格式
不过!!,当我们有了列表还不够,更多的时候,我们还要提取其中的元素为我们所用
这就涉及到了元素的提取

这里分为单个元素和多个元素的提取

单个元素~

name=['小明','小红''小王']
print(name[1])
小红

多个元素~

list2 = [5,6,7,8,9]
print(list2[:])
print(list2[2:])
print(list2[:2])
print(list2[1:3])
print(list2[2:4])
[5, 6, 7, 8, 9]
[7, 8, 9]
[5, 6]
[6, 7]
[7, 8]

过了一周,你正上着课呢,教导主任突然领了一个新学生“小美”,说是转校生,要插到你们班。这时,我们就需要用到append()函数给列表增加元素,append的意思是附加,增补。
过了两周,你正上着课呢,教导主任突然领了一个新学生“小美”,说是转校生,要插到你们班。这时,我们就需要用到append()函数给列表增加元素,append的意思是附加,增补。

然后是字典
在这里插入图片描述
这里需要强调的是,字典中的键具备唯一性,而值可重复

如果你不小心声明了两个以’小明’为键的【键值对】,后出现的【键值对】会覆盖前面的【键值对】。

字典的增减

# 直接运行下面的代码,留意字典以及新的键值对是如何增加的:

album = {'周杰伦':'七里香','王力宏':'心中的日月'}
del album['周杰伦']
print(album)

album['周杰伦']='迈向'
print(album)
print(album['周杰伦'])

列表和字典的异同

不同点

一个很重要的不同点是列表中的元素是有自己明确的“位置”的,所以即使看似相同的元素,只要在列表所处的位置不同,它们就是两个不同的元素。我们来看看代码:

# 如果==左右两边相等,值为True,不相等则为False。
print(1 == 1)  
# 1等于1,所以值为True

print(1 == 2)
# 1不等于2,所以为False

students1 = ['小明','小红','小刚']
students2 = ['小刚','小明','小红']
print(students1 == students2)

scores1 = {'小明':95,'小红':90,'小刚':100}
scores2 = {'小刚':100,'小明':95,'小红':90}
print(scores1 == scores2)

而字典相比起来就显得随和很多,调动顺序也不影响。因为列表中的数据是有序排列的,而字典中的数据是随机排列的。

这也是为什么两者数据读取方法会不同的原因:列表有序,要用偏移量定位;字典无序,便通过唯一的键来取值。
相同点

我们先来看第一个共同点:在列表和字典中,如果要修改元素,都可用赋值语句来完成。看一下代码:

ist1 = ['小明','小红','小刚','小美']
list1[1] = '小蓝'
print(list1)

dict1 = {'小明':'男'}
dict1['小明'] = '女'
print(dict1)

所以,上面修改小刚成绩的时候,其实直接用赋值语句即可,del语句通常是用来删除确定不需要的键值对。

第二个共同点其实之前已经略有提及,即支持任意嵌套。除之前学过的数据类型外,列表可嵌套其他列表和字典,字典也可嵌套其他字典和列表。
先来看看第一种情况:列表嵌套列表。你在班级里成立了以四人为单位的学习小组。这时,列表的形式可以写成

students = [['小明','小红','小刚','小美'],['小强','小兰','小伟','小芳']]

students这个列表是由两个子列表组成的,现在有个问题是:我们要怎么把小芳取出来呢?
可能你数着小芳是列表的第7个元素(从0开始),所以想students[7]不就能取到小芳吗?
事情当然没有那么简单,当我们在提取这种多级嵌套的列表/字典时,要一层一层地取出来,就像剥洋葱一样:
在这里插入图片描述

现在,我们确定了小芳是在students[1]的列表里,继续往下看。
在这里插入图片描述
小芳是students[1]列表里偏移量为3的元素,所以要取出小芳,代码可以这么写:

students = [['小明','小红','小刚','小美'],['小强','小兰','小伟','小芳']]
print(students[1][3])

第六章:for循环和while循环

在这里插入图片描述

每个人的生活和工作都充满了循环,很多时候,循环意味着重复和枯燥。比如你要手动输入200个员工的个人信息,比如她要一遍一遍地给不认真的人费劲口舌解释同样的事情,又比如他一成不变、如同一潭死水般的生活。
一成不变的生活终归需要你自己去打破循环,但工作的事,就大可让计算机帮一帮我们了。与人类不同,计算机不怕苦也不怕累,无聊的事情可以重复上千遍,只要能追寻到你想要的答案。
这恰恰就是编程解放人类的地方。比如你需要下载很多很多张图片,本来你是要手动操作的,而计算机通过【循环】,就可以依照某些规则,帮你一张一张地下载图片,你在一旁歇着就好。计算机干重复性的工作比你拿手。
再比如作为运营,可能需要去解散很多的用户群,本来要一个一个手动点击,而计算机通过【循环】,就可以依照某些规则,帮人一个一个解散。计算机干重复性的工作比你省力。
现在你再看“循环”这两个字,是不是跟开始不太一样了?
为什么计算机就特别擅长做重复性工作呢?注意,是“超擅长、速度超快”,而不只是“能干活、不抱怨”。
究其原理,其实是因为代码中的【循环语句】,让计算机能够重复性地、自动地执行指令。

在这里插入图片描述

要实现“重复、自动地执行代码”,有两种循环语句可供我们选择使用:一种是for…in…循环语句,另一种是while循环语句。
“循环”在计算机中是非常重要,是最基础的编程知识,为了讲解得更加清楚,我们将循环这一章节分成了上下两关。这一关,我们将对两种循环语句形成初步的了解,并学会简单的应用。

for循环

  1. 话不多说,我们先一起来看看第一种循环的方式:for…in…循环,它也被简称为for循环。

先看一段最简单的for循环代码,了解它的格式:
在这里插入图片描述

for i in [1,2,3,4,5]:
   print(i)
   1
   2
   3
   4
   5

终端上依次出现了列表里的所有数字,我们用大白话来打个比方,以便更好地理解这段代码的意义

在这里插入图片描述

for i in [1,2,3,4,5]:
   print(i)

#有一群数字在排队办业务,也就是列表[1,2,3,4,5]
#它们中的每一个被叫到号的时候(for i in),就轮流进去一个空房间办业务
#每一个数字进去房间之后,都对计算机说:“喂,我要办这个业务:帮忙把我自己打印出来”,也就是print(i)
#然后计算机忠实的为每一个数字提供了打印服务,将1,2,3,4,5都打印在了屏幕上

这里需要注意的是:列表,字典,字符串都可以是“一群排队办业务的人”
而整数、浮点数是不属于“一群排队办业务的人”的,如果把它们放在for循环里,代码会报错。
举个例子:

#字符串
for i in '吴承恩':
    print(i)
    吴
    承
    恩
#字典
dict = {'日本':'东京','英国':'伦敦','法国':'巴黎'}

for i in dict:
    print(i)
print(i)
 日本
 英国
 法国
 法国

range()函数

除了列表,字典,字符串三种数据类型,我们还可以遍历其他的数据集合。比如和for循环常常一起搭配使用的:range() 函数。

# 请直接运行代码
for i in range(3):
    print(i)
    0
    1
    2

运行后,你看到了整数0,1,2,是不是?使用range(x)函数,就可以生成一个从0到x-1的整数序列。

它还有更多用法,再来看这段代码,并运行:

for i in range(3):
    print('我很棒')
	我很棒
	我很棒
	我很棒

重要的事情说三遍,哈哈。像这样,有了range()函数之后,当你想把一段代码固定重复n次时,就可以直接使用for i in range(n)解决问题。来练习一下:如果你要重复打印“书桓走的第n天,想他”,n为0到10,你会怎么写?

for i in range(11):
    print('书恒走的第'+str(i)+'天,想他')
    书恒走的第0天,想他
    书恒走的第1天,想他
    书恒走的第2天,想他
    书恒走的第3天,想他
    书恒走的第4天,想他
    书恒走的第5天,想他
    书恒走的第6天,想他
    书恒走的第7天,想他
    书恒走的第8天,想他
    书恒走的第9天,想他
    书恒走的第10天,想他        

range()函数还有一种用法,我们来直接运行体验一下:

for i in range(0,10,3):
    print(i)
	0
	3
	6
	9

你观察出规律了么?这里range(0,10,3)的意思是:从0数到9(取头不取尾),步长为3。
在这里插入图片描述

while循环

先来看看while循环长啥样:

在这里插入图片描述
举个栗子:

a = 0
while a < 5:
    a = a + 1
    print(a)
    1
    2
    3
    4
    5

还是1,2,3,4,5依次出现,对吧?我们也用大白话去解释一下这段代码。
和for循环语句不同,while语句没有“空房间”,也不是“把一群排队办业务的人做完”。它是“在一定的条件下”,“按照流程办事”。

在这里插入图片描述

a = 0                #先定义变量a,并赋值
while a < 5:         #设定一个放行条件:a要小于5,才能办事
    a = a + 1  # 满足条件时,就办事:将a+1
    print(a)   # 继续办事:将a+1的结果打印出来

两种循环对比

for循环和while循环最大的区别在于【循环的工作量是否确定】,for循环就像空房间依次办理业务,直到把【所有工作做完】才下班。但while循环就像哨卡放行,【满足条件就一直工作】,直到不满足条件就关闭哨卡。
所以说,当我们【工作量确定】的时候,我们就可以让for循环来完成重复性工作。反之,要【工作量不确定时】可以让while循环来工作:

# 适合用for...in...循环
for i in '神雕侠侣':print(i)

# 适合用while循环
password = ''
while password != '816':
​     password = input('请尝试输入密码:')

第七章:布尔值和四种语句

用数据做判断:布尔值

之前我们提到,计算机利用数据有三种方式:1.直接使用数据,2.计算和加工数据,3.用数据做判断。
除了while循环,我之前学过的if…elif…else语句,也涉及到【利用数据用做逻辑判断】。当逻辑判断通过才会继续执行

在这里插入图片描述

当然,if和while有个显著的区别。那就是if语句只会执行一次,而while是循环语句,只要条件判断为真,就一直循环执行。
这个“判断”的过程,在计算机的世界里是如何发生的呢?
计算机的逻辑判断,只有两种结果,就是True(英文意思是“真”)和False(英文意思是“假”),没有灰色地带。这个计算真假的过程,叫做【布尔运算】。
而True和False,也就叫做【布尔值】。

在这里插入图片描述
现在我们知道了什么是布尔运算以及布尔值的作用,我们接着学习【布尔运算】的三种方式。其中的第一种,就是作比较。

两个数值做比较

其实刚才我们print(3>5),计算机会先做一次布尔运算,判断3是否大于5,然后再把判断的结果以【布尔值】的方式打印出来。
用两个数值做比较的【布尔运算】,主要包含以下情况在这里插入图片描述
主要记住前两种==和!=,这两种在条件判断中用得非常多。还有大于>和小于<了,这都属于数学常识了。
另外,特别提醒大家一点:在代码中,A == B表示A和B相等,表示相等关系;而=表示给变量赋值。=和虽然长得相似,但没有任何关系。

我们接着看布尔运算的第二种方式:

直接用数值做运算。

请看这段代码:

if 1:
    print('熊猫')
    熊猫

终端打印出了一个字符串熊猫。我们看看这两行代码,这是一段使用了条件判断的代码。因为终端打印出了’熊猫’,说明 if 后面的条件为真。
可是怪就怪在,if后面接的不像是一个“条件”,而是一个数字。
其实,整数1在这里就是作为一个条件,被判断为真(True)。这就是数值本身作为一个条件,被判断真假的情况。
那为什么可以这样操作呢?
因为在Python中已经设定好什么数据为真,什么为假。假的是有限的,那么除了假的,就都是真的。请看下图在这里插入图片描述

好啦,现在你明白了“直接用数值做布尔运算”是怎么一回事,再来看看第三种情况。

布尔值之间的运算

你会接触到and、or、not、in、not in五种运算,别怕,只是看起来多,我保证不难。
还是用例子来说明吧。我们先看看【and】和【or】。请先阅读代码,然后直接运行:

# 请先阅读代码,然后直接运行
a = 1
b = -1

print('以下是and运算')
if a==1 and b==1:    # 【b实际上是-1】
    print('True')
else:
    print('False')

print('以下是or运算')
if a==1 or b==1:  # 【b实际上是-1】
    print('True')
else:
    print('False')
    以下是and运算
    False
    以下是or运算
    True

a= =1 and b= =1的意思是【a=1并且b=1】,要两个条件都满足,才能判断为True,而a= =1 or b= =1的意思是【a=1或者b=1】,只要两个条件满足一个,就能判断为True。

对所有的布尔计算方式做个总结。
在这里插入图片描述

在这里插入图片描述
多发点

掌握了布尔值,以后我们可以写出更加简洁的while循环。
比如说,昨天用while循环重复执行100遍任务,代码会这样写:

i = 1
while i<101 :
   print('把这句话打印100遍')
   i = i+1

今天理解布尔运算原理后,可以把这段代码改造成更“程序员”的方式:

i = 100
while i:
   print('把这句话打印100遍')
   i = i-1

四种语句

break语句

我们先来看看break语句。break的意思是“打破”,是用来结束循环的,一般写作if…break。它的写法长这样:

# break语句搭配for循环
for...in...:
    ...
    if ...:
        break

# break语句搭配while循环
while...(条件):
    ...
    if ...:
        break

在这里,if…break的意思是如果满足了某一个条件,就提前结束循环。记住,这个只能在循环内部使用。
在这里插入图片描述

我们运行一下代码来理解这一点。下面是一个for和while循环代码,本来会循环5次,但循环到第4、3次的时候就被break语句打断,然后结束循环了。

# 请运行代码体验效果

for i in range(5):
    print('明日复明日')
    if i==3:  # 当i等于3的时候触发
        break # 结束循环

# 请运行代码体验效果

i = 0
while i<5:
    print('明日复明日')
    i = i+1
    if i==3:  # 当i等于3的时候触发
        break # 结束循环

continue语句

continue的意思是“继续”。这个子句也是在循环内部使用的。当某个条件被满足的时候,触发continue语句,将跳过之后的代码,直接回到循环的开始。
它的写法是这样的:

# continue语句搭配for循环
for...in...:
    ...
    if ...:
        continue
    ...

# continue语句搭配while循环
while...(条件):
    ...
    if ...:
        continue
    ...

在这里插入图片描述
举个例子:

# 观察代码,然后运行代码看看是什么结果

# continue语句搭配for循环
for i in range(5):
    print('明日复明日')
    if i==3:  # 当i等于3的时候触发
        continue # 回到循环开头
    print('这句话在i等于3的时候打印不出来')

# continue语句搭配while
明日复明日
这句话在i等于3的时候打印不出来
明日复明日
这句话在i等于3的时候打印不出来
明日复明日
这句话在i等于3的时候打印不出来
明日复明日
明日复明日
这句话在i等于3的时候打印不出来

上面的代码,当i==3的时候会触发continue语句,于是回到了循环开头,跳过了一句print语句。

pass语句

pass语句就非常简单了,它的英文意思是“跳过”。
我们举个例子,请你运行代码体验一下:

#请你运行代码体验一下

a = int(input('请输入一个整数:'))
if a >= 100:
    pass
else:
    print('你输入了一个小于100的数字')

这个代码的意思是:当a>=100的时候,跳过,什么都不做。其他情况,也就是a<100的时候,执行一个print语句。
如果没有pass来占据一个位置表示“什么都不做”,以上的代码执行起来会报错

else语句

最后一种else语句,我们在条件判断语句见过【else】,其实,else不但可以和if配合使用,它还能跟for循环和while循环配合使用。
举一个例子;

for i in range(5):
    a = int(input('请输入0来结束循环,你有5次机会:'))
    if a == 0:
        print('你触发了break语句,循环结束,导致else语句不会生效。')    
        break
else:
    print('5次循环你都错过了,else语句生效了。')

用一句话总结,当循环中没有碰到break语句,就会执行循环后面的else语句,否则就不会执行。
在while循环中,else的用法也是如此,格式一模一样:

while...(条件):
    ...
else:
    ...

最后做个总结
在这里插入图片描述

第八章:函数

函数的作用

在这里插入图片描述

函数的组成

我们先不急着讲Python里的函数长什么样。我想你第一次听到这个词,大概率是在初中的数学课堂上,那就先让我们回忆下吧。
y = 3x + 5是个标准的一次函数,x是自变量,3x + 5是执行过程,自变量x决定了y的输出值。
函数(Function)能实现的功能从简单到复杂,各式各样,但其本质是相通的,我们可以看作成三个部分。

在这里插入图片描述

在 Python中,函数也是如此,“喂”给函数一些数据,它就能内部消化,执行相应的功能,最终给你“吐”出你想要的东西,就好比自动贩卖机一样。

在这里插入图片描述

以上“陈列的”就是我们之前接触过的Python函数,它们是Python本身就自带的函数,所以也叫内置函数,提供了许多我们常用的基本功能。
如果你眼尖的话,你还会发现图片里的函数后面都跟了个括号。
括号里放的东西,也就是我们需要输入给函数的数据,它在函数中被称作【参数】。【参数】指向的是函数要接收、处理怎样的数据(你也可以把它理解成自变量)。
比如len()函数会根据括号里放的参数的不同,输出(返回)不同的值。

a = len('万物的终极答案是42')
print(a)
b = len(['海伯利安','基地','三体'])
print(b)

括号里面的字符串和列表,都是len() 函数的参数
在这里插入图片描述
好,现在问题来了,就像贩卖机不总是有我们想要的东西。除了Python自带的内置函数,我们能不能根据自己的需要,自己定义一个独一无二的函数呢?
答案是肯定的,下面我就来教大家如何DIY一个函数,这也是今天的重点。

定义和调用函数

编写函数的第一步,我们需要去定义一个函数,我们先来看看基本语法。
在这里插入图片描述
照着这个语法,我们以刚刚提到的y = 3x + 5 为例子,来定义一个一次函数。
还记得我说的函数三部分吗?我们可以把这里的参数等同于输入,函数体等同于执行过程,return语句等同于输出,所以呢,这个函数可以写成这样:

def math(x):
    y = 3*x + 5
    return y

来一起读代码。
第1行:def的意思是定义(define),math是【函数名】(自己取的),再搭配一个英文括号和冒号,括号里面的x是参数(参数名也是自己取)。
第2行:def下一行开始缩进的代码就是函数要实现的功能,也叫【函数体】。这里的功能就是:根据x计算出一个值y。
第3行:return语句是返回的意思,可以指定函数执行完毕后最终会返回什么值或表达式,否则计算机是无法判断出函数最终要输出什么结果的。
定义函数的语法并不难,但有些注意事项一开始要特别注意才能少踩坑,我将其标记在下面代码块的注释里,请你仔细阅读下。

# 函数名:1. 名字最好能体现函数的功能,一般用小写字母和单下划线、数字等组合
#      2. 不可与内置函数重名(内置函数不需要定义即可直接使用)
def math(x):
# 参数:根据函数功能,括号里可以有多个参数,也可以不带参数,命名规则与函数名相同
# 规范:括号是英文括号,后面的冒号不能丢
    y = 3*x + 5
# 函数体:函数的执行过程,体现函数功能的语句,要缩进,一般是四个空格
    return y
# return语句:后面可以接多种数据类型,如果函数不需要返回值的话,可以省略

自己DIY一个试试:

def math(x):
    y =  x ** 2 + x
    return y

y = math(10)
print(y)
#math(10)的意思是将整数10赋值给参数x并运行该函数。函数执行完毕后最终返回了y的值即110,然后将这个结果赋值给变量a,再用print()将变量a打印出来。

参数类型

这一部分,我会主要介绍函数中常见的位置参数、默认参数和不定长参数。
接下来,我会用一个场景将例子串起来,这个场景就在本关标题里 —— 深夜食堂营业记!深夜食堂,开张!

#直接运行代码即可    
def opening():
    print('总有一种味道能温暖你~')
    print('深夜食堂正式开业啦!')
    print('欢迎来自五湖四海的你前来品尝!')
   
opening()
	总有一种味道能温暖你~
	深夜食堂正式开业啦!
	欢迎来自五湖四海的你前来品尝!

我们可以看到,这里定义了一个opening()函数,但是括号里没有带参数,原因是这个函数的功能是打印出固定的三句话,不需要参数的参与。
需要强调的是,即便是没有参数,我们在调用函数的时候也不能省略括号,如此例中的opening()。
在这个例子里,也不需要return语句,原因是这个函数直接在屏幕打印出内容,不需要返回值。事实上,没有return语句的函数,Python也会在末尾隐性地加上return None,即返回None值。
换句话说,有时候我们需要的只是函数的执行过程(比如打印内容),有时我们需要函数执行完毕的返回结果。
好,那接下来,我们来看看有多个参数的情况。
在开业初期,为了吸引人流,你采取的策略是顾客可以任意点菜。但因为人手不足,所以只能为每个人提供一份开胃菜和一份主食。如果写成函数的形式,这个函数就会有两个参数。
接下来我会用appetizer和course来表示开胃菜和主食~

def menu(appetizer, course):
    print('一份开胃菜:' + appetizer)
    print('一份主食:' + course)

menu('话梅花生','牛肉拉面')

一份开胃菜:话梅花生
一份主食:牛肉拉面

这里的’话梅花生’和’牛肉拉面’是对应参数的位置顺序传递的,所以appetizer和course被叫作【位置参数】,当有多个参数的时候,我们就必须按照顺序和数量传递,这也是最常见的参数类型。
如果不按位置顺序传递,就会闹出乌龙

回到这个食堂,经营一阵之后,为了吸引更多的人流,你决定给每个顾客免费送上一份甜品绿豆沙,这时候你就可以用到【默认参数】,直接在定义函数的时候给参数赋值。
要注意的是:默认参数必须放在位置参数之后。我们来看看代码:

def  menu(appetizer, course, dessert = '绿豆沙'):
    print('一份开胃菜:' + appetizer)
    print('一份主食:' + course)
    print('一份甜品:' + dessert)

menu('话梅花生','牛肉拉面')
#因为已经默认将'绿豆沙'传递给dessert,调用时无须再传递。
一份开胃菜:话梅花生
一份主食:牛肉拉面
一份甜品:绿豆沙

如果一个函数的某个参数值总是固定的,那么设置默认参数就免去了每次都要传递的麻烦。不过默认参数并不意味着不能改变

def menu(appetizer, course, dessert = '绿豆沙'):
    print('一份开胃菜:' + appetizer)
    print('一份主食:' + course)
    print('一份甜品:' + dessert)


menu('话梅花生','牛肉拉面')
menu('话梅花生','牛肉拉面','银耳羹')
#银耳羹对应参数dessert

一个萝卜一个坑,因为前两个位置参数已经有对应的值传递,Python会自动将'银耳羹'传递给参数dessert,替换了默认参数的默认值。

举个例子:

def menu(*barbeque):
    for i in barbeque:
        print('一份烤串:' + i)

menu('烤香肠', '烤肉丸')        
menu('烤鸡翅', '烤茄子', '烤玉米')
# 不定长参数可以接收任意数量的值
一份烤串:烤香肠
一份烤串:烤肉丸
一份烤串:烤鸡翅
一份烤串:烤茄子
一份烤串:烤玉米

第九章:类和对象

类是生活中我们所说的类,是物以类聚的类,是分门别类的类,是多个类似事物组成的群体的统称。类的概念能帮助我们快速理解和判断事物的性质。
同样在编程世界里,其实我们从第一天开始就在接触类(class),比如整数、字符串、浮点数等,不同的数据类型就属于不同的类。
准确来说,它们的全名是整数类、字符串类、浮点数类。我们可以用type()函数来验证一下:

print(type('1')) # '1'属于字符串类'str'
print(type(1))  # 1属于整数类'int'
print(type([1])) # [1]属于列表类'list'

不难发现,类之所以为类是因为每一个类之下都包含无数相似的不同个例。比如你正在看的这台电脑和我写稿的电脑,都属于电脑类;你和我,都属于人类。
编程世界中,每个类也会有众多实际的个例。比如数字1和2,都属于整数类;‘第一个栗子’和’第二个栗子’,都属于字符串类。
在Python的术语里,我们把类的个例就叫做实例 (instance),可理解为“实际的例子”。

万事万物,皆为对象

当然,这里说的不是“找对象”的对象,也不是??,而是面向对象编程中的对象(object)。那么,它究竟是什么?
一言以蔽之:Python中的对象等于类和实例的集合:即类可以看作是对象,实例也可以看作是对象,比如列表list是个类对象,[1,2]是个实例对象,它们都是对象。
事实上现实生活中也类似,不论是类还是实例,都可以当作行动或思考的对象。
例如:我们会说“电脑很强大”,也会说“我的电脑卡了”。前者说的是电脑类(类对象),后者说的是我的电脑(实例对象)。
所以,在Python中有这么一句话:

标题
现在我们明白类、实例、对象三者之间的关系,接下来我们就可以用代码制造一个对象,也就是类与实例的创建。

类的创建和调用

我们先来看一个创建电脑类的示例代码:

class Computer:

    screen = True

    def start(self):
        print('电脑正在开机中……')

应该能读懂吧?电脑类,都有屏幕,所以属性screen的值为True;开机时会显示“电脑正在开机中……”。
这是对代码的生活化解释,下面我们来看具体的含义:
在这里插入图片描述
可以看到:实例方法的创建语句,和函数的定义语句很类似,唯一不同的是:实例方法中有个必须放在首位的参数self。
还是以那个电脑类为例(重点看最后三行代码):

class Computer:

    screen = True

    def start(self):
        print('电脑正在开机中……')

my_computer = Computer()
print(my_computer.screen)
my_computer.start()
'电脑正在开机中……

在这里插入图片描述
倒数第二行:my_computer.screen先是获取到类属性screen对应的值True,再用print()打印出来。
最后一行:my_computer.start()调用方法start(),这个方法的功能是直接打印出’电脑正在开机中……'。

归纳一下三个步骤就是:创建一个类 —— 类的实例化 —— 用实例调用类的属性和方法。

标题



版权声明:本文为m0_54812370原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。