常用内建函数

在今后的学习过程中,我们会用到很多内建函数,比如标准的输入输出,类型转换等等。内建函数实现了一些常用的功能,可以直接拿来使用。

函数名功能返回值
print()向终端输出信息
input()通过终端输入数据并返回结果
int()将参数中的值转换成整型并返回结果
float()将参数中的值转换成浮点型并返回结果
str()将参数中的值转换成字符串并返回结果
eval()将参数中字符串转换成一段可执行的表达式并返回结果
chr()返回整型参数在Uncode 中对应的字符
ord()返回字符参数在Uncode 中对应的码位

print()

我们在hello, world中已经使用过了print()函数:

>>>print("hello, world!")
hello, world!

print()函数的功能就是将参数的内容打印出来:

  1. 对于实际的值,原样打印,字符串要用引号(如上)
>>> print(1)
1
>>> print(1.4)
1.4
>>> print(True)
True
  1. 对于变量,打印变量内存储的值
>>> a = 4
>>> print(a)
4
>>> name = "Chris"
>>> print(name)
Chris
  1. 也可以打印函数返回的值
>>> 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'

练习: 从终端输入两个值,分别赋值给变量ab,并尝试进行计算下列算式,查看结果:

>>> 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

练习: 重新练习下面练习题,从终端输入两个值,分别赋值给变量ab,并尝试进行计算下列算式,查看结果 要求:1. 第一次尝试给 ab 分别输入整型 2. 第二次尝试给 ab 分别输入浮点型

>>> # 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)。

此处我们先对位置参数默认值参数简单介绍一下,首先需要知道的是,函数的参数可以有零个和多个:

  1. 当函数f没有参数时,在调用时只需要写出f()即可,括号内不需要给出任何值。

  2. 当函数f有一到多个位置参数时,有三种调用方式,假设函数为f(a, b, c):

    • 按顺序传参数,比如f(a, b, c)
    • 传值时,按名字传参数,比如f(b=1, a=5, c=4),如果写在最前面的参数不是位置1的参数,那么其它参数必要都要按名字传值;
    • 最前面参数按顺序传参时,排在后面的参数可以按名字传,比如f(1, c=5, b=10)
  3. 当函数f中,有默认值参数时,根据Python语法,默认值一定会写在位置参数之后,调用方式除第2点中的三种之外,还有另外一种方式为,假设函数为f(a, b=5, c=7)

    • 不给默认值参数传值,调用时直接写f(1)
    • 当不需要给第二个参数传值时,可以写作f(1, c=7)

返回值

调用一个有返回值的函数会生成一个值,我们通常可以将这个返回值赋值给某个变量,或者将函数的调用作为为表达式的一部分。

例如:

>>> a = int('5')
>>> b = int('5') + 7

Python 中,直接执行有返回值的函数不会有错误发生,但是这个返回值只在缓存里短暂地保留,稍后很快就会被释放。可以将函数比喻成一只母鸡,输入的参数值比喻成虫子,而接受返回值的变量或者表达式可以比喻成篮子;母鸡吃了虫子之后,就会下蛋;如果没有篮子接受这颗蛋,它就会碎掉;所以为了保护鸡蛋的完整,需要有篮子接住它。

hen

基于上述原因,我们在调用有返回值函数时要配合变量或者表达式来使用,不要做无用的调用。