本系列为Python编程基础的学习笔记。
本文主要介绍Python的用户输入、while循环、函数的相关基础知识。

一、用户输入

1.1 字符串输入

input()函数
输出用户提示信息,并将用户输入的字符串存储到一个变量中,格式:

变量名 = input(提示信息)

例如:

1
2
message = input('Name: ')
print(message)

运行结果如下:
Name: Test
Test

当提示过长时,可先将提示存储到单独的变量中再输出,例如:

1
2
3
4
5
prompt = 'This is the first part.'
prompt += '\nName: '

message = input(prompt)
print(message)

运行结果如下:
This is the first part.
Name: Test
Test

1.2 数字输入

int()函数
将input()函数输入的字符串表示转换为数值表示,格式:

变量名 = input(提示信息)
变量名 = int(变量名)

例如:

1
2
num = input('Number: ')
num = int(num)

二、while循环

2.1 while循环

while循环将不断运行,直到指定的条件不满足为止,例如:

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

运行结果为:
1
2
3
4

2.2 循环标志

标志:在要求多个事件都满足才能继续运行的程序中,可以定义一个变量用于循环判断,该变量称为标志。

若全部事件都满足,标志为True,循环继续;
若任一事件不满足,标志为False,循环终止。

2.3 break和continue

break:不再运行循环中的剩余代码,立即退出循环,不受条件测试结果的影响。
continue:不再运行循环中的剩余代码,回到循环开头,根据条件测试结果判断是否继续循环。

2.4 while循环处理列表和字典

要在遍历列表的同时对其进行修改,可使用while循环。

列表之间移动元素
例如:

1
2
3
4
5
6
7
8
list1 = ['test1', 'test2', 'test3']
list2 = []

while list1:
list2.append(list1.pop())

for element in list2:
print(element)

运行结果为:
test3
test2
test1

删除列表中所有特定元素
例如:

1
2
3
4
5
6
example = ['test', 'test', 'TEST']

while 'test' in example:
example.remove('test')

print(example)

运行结果为:
[‘TEST’]

填充字典
例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
examples = {}
flag = True

while flag:
ID = input('ID: ')
Name = input('Name: ')
examples[ID] = Name

repeat = input('Continue?(yes or no): ')
if repeat == 'no':
flag = False

print(examples)

运行结果为:
ID: 1
Name: TEST
Continue?(yes or no): yes
ID: 2
Name: test
Continue?(yes or no): no
{‘1’: ‘TEST’, ‘2’: ‘test’}

三、函数

3.1 函数定义

def关键字
使用关键字def来定义函数,格式:

def 函数名(参数信息):
    文档字符串
    函数体语句

例如:

1
2
3
def test():
"""This is a test function"""
print("Hello!")

注意:
参数可以为空,但是括号必不可少;
文档字符串用三引号括起,用来描述函数的功能,Python用其来生成有关程序中函数的文档。

函数调用
依次指定函数名和括号内的参数信息,例如调用上述函数:

1
test()

运行结果为:Hello!

实参和形参
形参:函数完成其工作所需的一项信息;
实参:调用函数时传递给函数的信息。
例如:

1
2
3
4
5
6
def test(message):
"""This is a test function"""
print(message)


test('Hello!')

其中,message是形参,’Hello!’是实参。

默认值
在定义函数时可给参数赋予默认值。
在函数调用时,如果参数被显式提供实参,则默认值被修改,否则参数使用默认值。
例如:

1
2
3
4
5
6
def test(message='Hello!'):
"""This is a test function"""
print(message)


test()

运行结果为:Hello!

注意:在使用默认值时,参数列表中必须先列出无默认值的形参,再列出有默认值的形参。

使用函数的注意事项
每个函数都应只负责一项具体的工作;
总是可以在一个函数中调用另一个函数,这有助于将复杂的任务划分为一系列的步骤。

3.2 传递实参

位置实参
要求实参的顺序和形参的顺序相同,Python将按顺序将函数调用中的实参关联到函数定义中相应位置的形参。
例如:

1
2
3
4
5
6
7
def test(s_id, s_name):
"""This is a test function"""
print(s_id)
print(s_name)


test(1, 'test1')

关键字实参
要求每个参数都由变量名和值组成,直接在实参中将名称和值关联起来,函数调用时无需考虑实参顺序。
例如:

1
2
3
4
5
6
7
def test(s_id, s_name):
"""This is a test function"""
print(s_id)
print(s_name)


test(s_name='test1', s_id=1)

参数错误
当提供的实参多于或少于函数所需的形参时,将出现参数不匹配的错误,例如:

1
2
3
4
5
6
def test (message):
"""This is a test function"""
print(message)


test()

将产生报错:

3.3 返回值

在函数中,可使用return语句将值返回到调用函数的代码行。
函数可返回任何类型的值,包括列表和字典等较复杂的数据结构。

3.4 传递列表

函数访问修改列表
将列表传递给函数之后,函数便能直接访问列表中的内容。
将列表传递给函数之后,函数同样能够对其内容进行修改,并且这种修改是永久性的,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
example1 = ['test1', 'test2', 'test3']
example2 = []


def test (exa1, exa2):
"""This is a test function"""
while exa1:
exa2.append(exa1.pop())


test(example1, example2)
print(example1)
print(example2)

运行结果为:
[]
[‘test3’, ‘test2’, ‘test1’]

禁止函数修改列表
向函数传递列表的副本而不是原件,例如在上例当中改为:

1
test(example1[:], example2)

运行结果变为:
[‘test1’, ‘test2’, ‘test3’]
[‘test3’, ‘test2’, ‘test1’]

注意:不建议这么做,理由是使用先成列表可以避免花时间和内存来创建副本,提高效率。

3.5 传递任意数量实参

使用任意数量的值实参
函数有一个*开头的形参(*examples),该形参能够将提供给函数的不定数量的值统统接收。原因是*开头的形参定义了一个空元组(examples),所有接收到的值都得以封装到该元组当中。例如:

1
2
3
4
5
6
7
def test(*examples):
"""This is a test function"""
for example in examples:
print(example)


test('test1', 'test2', 'test3')

运行结果为:
test1
test2
test3

使用任意数量的关键字实参
函数有一个**开头的形参(**examples),该形参能够将提供给函数的不定数量的键-值对统统接收。原因是**开头的形参定义了一个空字典(examples),所有接收到的键-值对都得以封装到该字典当中。例如:

1
2
3
4
5
6
7
8
def test(**examples):
"""This is a test function"""
for key, value in examples.items():
print(key)
print(value)


test(ID=1, Name='test')

运行结果为:
ID
1
Name
test

结合使用位置实参和任意数量实参
要让函数接受不同类型的实参时,必须让函数先匹配位置实参和关键字实参,最后再匹配任意数量实参。

注意:在编写函数时,可以以各种方式混合使用位置实参、关键字实参和任意数量实参。

3.6 将函数存储在模块

函数存储在被称为模块的独立文件中(扩展名为.py),使用import语句可以将模块代码导入到主程序中使用。

优点
函数在独立的文件中,可以隐藏程序代码的细节,将重点放在高层逻辑上;
能够在众多的不同程序中重用函数;
便于函数库的共享使用。

导入整个模块
使用一条import语句并指定模块名,可以在程序中使用该模块的所有函数,格式:

导入:import 模块名
使用:模块名.函数名()【句点表示法】

例如:

1
2
3
4
import test

test.function1()
test.function2()

导入特定函数
使用from和import结合导入特定函数,格式:

导入:from 模块名 import 函数名1, 函数名2, 函数名3, ……
使用:函数名()

例如:

1
2
3
4
from test import function1, function2

function1()
function2()

使用as给函数指定别名
格式:

from 模块名 import 函数名1 as 函数别名1, 函数名2 as 函数别名2, ……

例如:

1
2
3
4
from test import function1 as fun1, function2 as fun2

fun1()
fun2()

使用as给模块指定别名
格式:

import 模块名 as 模块别名

例如:

1
2
3
4
import test as te

te.function1()
te.function2()

导入模块中所有函数
使用*可以导入模块中的所有函数,例如:

1
2
3
4
from test import *

fun1()
fun2()

缺点:不建议使用该种方法,理由是模块中的函数直接被复制到这个程序文件中,可能会造成函数冲突出现意想不到的错误。
解决:只导入需要使用到的函数;导入整个模块,使用句点表示法。

3.7 函数规范

函数名应具有描述性,只在其中使用小写字母和下划线;
函数应包含简要阐述其功能的注释,注释采用文档字符串格式;
所有import语句应当放在文件开头(若文档开头有注释,放在注释内容之后);
函数与函数、函数与其它部分代码之间应当使用两个空行进行分开;
当参数较多时,其函数定义格式如下所示:

1
2
3
4
5
6
def function_name(
parameter_0, parameter_1, parameter_2,
parameter_3, parameter_4, parameter_5,
parameter_6, parameter_7, parameter_8,):
function_body…
function_body...

(未完待续…)

评论区 (输入正确的邮箱可以收到回复哦!网址可选)