常用内建函数
在今后的学习过程中,我们会用到很多内建函数,比如标准的输入输出,类型转换等等。内建函数实现了一些常用的功能,可以直接拿来使用。
函数名 | 功能 | 返回值 |
---|---|---|
print() | 向终端输出信息 | 无 |
input() | 通过终端输入数据并返回结果 | 有 |
int() | 将参数中的值转换成整型并返回结果 | 有 |
float() | 将参数中的值转换成浮点型并返回结果 | 有 |
str() | 将参数中的值转换成字符串并返回结果 | 有 |
eval() | 将参数中字符串转换成一段可执行的表达式并返回结果 | 有 |
chr() | 返回整型参数在Uncode 中对应的字符 | 有 |
ord() | 返回字符参数在Uncode 中对应的码位 | 有 |
print()
我们在hello, world中已经使用过了print()
函数:
>>>print("hello, world!")
hello, world!
print()
函数的功能就是将参数的内容打印出来:
- 对于实际的值,原样打印,字符串要用引号(如上)
>>> print(1)
1
>>> print(1.4)
1.4
>>> print(True)
True
- 对于变量,打印变量内存储的值
>>> a = 4
>>> print(a)
4
>>> name = "Chris"
>>> print(name)
Chris
- 也可以打印函数返回的值
>>> print(chr(65))
A
print()
函数是默认以\n
结束,也就是说,当打印完信息之后自动会换行,如果想要不自动换行,可以给参数end
传一个别的值:
>>>print(123);print(456)
123
456
>>>print(123, end = "$");print(456)
123$456
print()
函数也可以打印多段值,默认用' '
隔开,如果想要换成其它分隔符,可以给参数sep
传入其它值:
>>> a = 'A'
>>> b = 'B'
>>> c = 'C'
>>> print(a,b,c)
A B C
>>> print(a,b,c,sep = "&")
A&B&C
占位符
在用print()
函数向终端输出信息时,可以使用占位符来格式化:
占位符 | 描述 | 说明 |
---|---|---|
%d | 整型占位符 | 无 |
%f | 浮点型占位符 | 默认保留小数点后6位,如果要自定义保留n 位,可以写成%.nf ,结果会四舍五入 |
%s | 字符串占位符 | 无 |
>>> print("%s is a student." %"Tom")
Tom is a student.
>>> name = "Jerry"
>>> print("%s is a student." %name)
Jerry is a student.
>>> age = 10
>>> print("He is %d years old." %age)
He is 10 years old.
>>> height = 1.46
>>> print("His height is %.1f." %height)
His height is 1.5.
#有多个占位符时,需要用括号
>>> print("%s is a student. He is %d years old. His height is %.1f." %(name, age, height))
Jerry is a student. He is 10 years old. His height is 1.5.
#如果不填充占位符,那么就会原样输出。
>>> print("%s is a student. He is %d years old. His height is %.1f.")
%s is a student. He is %d years old. His height is %.1f.
input()
input()
函数可以接收标准输入的数据,并且把数据以字符串格式返回,括号里的参数会被输出到终端作为提示用,这里参数的用法和print()
一致:
>>> input()
# 下面一行是输入的内容,在输入时会有光标闪烁
1
# 下面一行是input()函数返回的值
'1'
>>> input("Input a value:")
# 先输出提示的参数,然后再在后面输入内容,在输入时会有光标闪烁
Input a value:1
'1'
由于input()
是有返回值的函数,所以当我们输入了值之后,如果没有把返回的值赋值给变量,那么这个值会马上被缓存释放,并不再存在,所以我们要用一个变量来接收这个返回值:
>>> a = input("Input a:")
# 下面一行是输入的内容,在输入时会有光标闪烁
Input a:1
>>> print(a)
'1'
练习: 从终端输入两个值,分别赋值给变量a
和b
,并尝试进行计算下列算式,查看结果:
>>> a = input("Input a:")
Input a: #输入值给a
>>> b = input("Input b:")
Input b: #输入值给b
#尝试下列算式:
>>> a + b
>>> a - b
>>> a * b
>>> a / b
int()和float()
假如你已经尝试了上述代码,给a
赋值了1
,给b
赋值了2
,那么你会发现加法运算的结果是'12'
,而其它运算都报了错误:
Traceback (most recent call last):
File "<pyshell#71>", line 1, in <module>
a-b
TypeError: unsupported operand type(s) for -: 'str' and 'str'
...
TypeError: can't multiply sequence by non-int of type 'str'
...
TypeError: unsupported operand type(s) for /: 'str' and 'str'
相信细心的同学已经想到了原因:用input()
函数通过终端输入的内容都会以字符串的形式返回出来,但是字符串与字符串之间并没有-、*、/
的运算,而+
运算只是把两个字符串连接到一起。
为了能够进行数学运算,我们需要用到int()
和float()
将返回的字符串转换成数值:
- int(): 将输入的参数转换成整型,可以输入的参数为<整型、浮点型和整数型的字符串>
>>> int(1)
1
>>> int(1.5)
1
>>> int("32")
32
>>> int("2.2")
Traceback (most recent call last):
File "<pyshell#74>", line 1, in <module>
int("2.2")
ValueError: invalid literal for int() with base 10: '2.2'
# int()是有返回值的函数,需要用变量接收返回值:
>>> a = int("32")
>>> print(a)
32
- float():将输入的参数转换成浮点型,可以输入的参数为<整型、浮点型和数值型的字符串>
>>> float(3)
3.0
>>> float(1.2)
1.2
>>> float("2.2")
2.2
>>> float("2.2.2")
...
Traceback (most recent call last):
File "<pyshell#78>", line 1, in <module>
float("2.2.2")
ValueError: could not convert string to float: '2.2.2'
# float()是有返回值的函数,需要用变量接收返回值:
>>> a = float("1.5")
>>> print(a)
1.5
函数之间是可以嵌套的:
>>> a = int(float("2.2"))
>>> print(a)
2
练习: 重新练习下面练习题,从终端输入两个值,分别赋值给变量a
和b
,并尝试进行计算下列算式,查看结果
要求:1. 第一次尝试给 a
和b
分别输入整型
2. 第二次尝试给 a
和b
分别输入浮点型
>>> # input a 代码,由学生练习时填写
>>> # input b 代码,由学生练习时填写
#尝试下列算式:
>>> a + b
>>> a - b
>>> a * b
>>> a / b
str()
str()
用来将输入的参数转换成字符串并返回:
>>> str(1)
'1'
>>> a = str(1)
>>> print(a)
>>> a
'1'
在IDLE中,用交互环境直接输入变量名字,会打印出该变量的值,这个和 print()
是有区别的,如果用print()
打印出来的是用户能理解的数据,而直接输入变量名字,打印出来的是解释器能理解的数据。但是在文本编程环境中,只能用print()
函数。
eval()
eval()
函数用来执行一个字符串表达式,并返回表达式的值。
>>> a = 5
>>> b = eval("a + 5")
>>> print(6)
b
如果字符串表达式中用到的变量不存在,就会报错:
>>> c = eval("d + 3")
Traceback (most recent call last):
File "<pyshell#85>", line 1, in <module>
c = eval("d + 3")
File "<string>", line 1, in <module>
NameError: name 'd' is not defined. Did you mean: 'id'?
chr()和ord()
我们可以将这两个函数理解成字典,chr()
和ord()
的功能是正好相反的,chr()
是根据数值查找字符,ord()
是根据字符查找它所在位置。
>>> chr(65)
'A'
>>> ord('A')
65
>>> ord("我")
25105
函数的参数
通过上面内建函数的学习,我们发现在调用函数时需要在()
给出一个值,这个值就是参数。
也许你已经在数学中学习过了有关未知数的概念,那么你对参数已经有了初步的接触,如下面的方程:
\[5x+(4 \times 5)-19=46\]
我们可以经过解方程得到\(x\)的值为9,然而这里的\(x\)是一个固定的值,在解方程之前它只是个未知数,只有解开方程之后才知道它的值是多少。
然而,Python
中参数更像是初中要学习的函数里的定义域:
\[ y=x^2+2x+1 \]
或者
\[ f(x)=x^2+2x+1 \]
这里的\(x\)是一个变化的值,随着\(x\)的变化,\(y\)或者函数\(f(x)\)的值也会变化。在编程领域,这里的\(x\)定义域可以理解成参数(parameters)。
此处我们先对位置参数
和默认值参数
简单介绍一下,首先需要知道的是,函数的参数可以有零个和多个:
-
当函数
f
没有参数时,在调用时只需要写出f()
即可,括号内不需要给出任何值。 -
当函数
f
有一到多个位置参数时,有三种调用方式,假设函数为f(a, b, c)
:- 按顺序传参数,比如
f(a, b, c)
; - 传值时,按名字传参数,比如
f(b=1, a=5, c=4)
,如果写在最前面的参数不是位置1
的参数,那么其它参数必要都要按名字传值; - 最前面参数按顺序传参时,排在后面的参数可以按名字传,比如
f(1, c=5, b=10)
。
- 按顺序传参数,比如
-
当函数
f
中,有默认值参数时,根据Python
语法,默认值一定会写在位置参数之后,调用方式除第2
点中的三种之外,还有另外一种方式为,假设函数为f(a, b=5, c=7)
:- 不给默认值参数传值,调用时直接写
f(1)
; - 当不需要给第二个参数传值时,可以写作
f(1, c=7)
。
- 不给默认值参数传值,调用时直接写
返回值
调用一个有返回值的函数会生成一个值,我们通常可以将这个返回值赋值给某个变量,或者将函数的调用作为为表达式的一部分。
例如:
>>> a = int('5')
>>> b = int('5') + 7
在 Python
中,直接执行有返回值的函数不会有错误发生,但是这个返回值只在缓存里短暂地保留,稍后很快就会被释放。可以将函数比喻成一只母鸡,输入的参数值比喻成虫子,而接受返回值的变量或者表达式可以比喻成篮子;母鸡吃了虫子之后,就会下蛋;如果没有篮子接受这颗蛋,它就会碎掉;所以为了保护鸡蛋的完整,需要有篮子接住它。
基于上述原因,我们在调用有返回值函数时要配合变量或者表达式来使用,不要做无用的调用。