Python学习06:函数

Posted CQ小子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习06:函数相关的知识,希望对你有一定的参考价值。

本文学习Python的笔记,仅供参考

函数

同C语言中的函数作用是一样的,可以将完成特定功能的代码写成一个函数,在使用的时候调用,避免频繁重新的写同样的代码。

调用函数

在Python库中提供了非常多的接口函数,可以按照使用手册进行调用,比如说之前常用的print()函数来打印值,input函数来输入参数,hex()函数可以将一个数字转换成16进制并输出

>>> hex(20)
'0x14'

定义函数

这边需要些一个输入一个数,输出平方的函数,Python中使用def定义函数,和C语言不太一样,可以看到下面的实现:

def my_square(a):
    return a*a
执行这条语句print(my_square(5)),就会输出25

def是函数的关键字,my_square是函数名,a是传入的参数,return函数执行完毕返回值

参数的传递

和C语言一样,包括值传递和指针传递,先来看下下面的例子,这个是一个值传递,在函数中其实数据都是分配到栈上了,a是函数中的变量,但是值不会被修改

a =5
def my_square(a):
    a = a*a
    return a

print(my_square(a))
print(a)
如果换一种方法,我将List中的一个元素传入,

l =[1,2,3,4,5]
def my_square(a):
    a[0] = a[0] + 1
    return a

print(my_square(l))
print(l[0])
可以看到输出:

======================= RESTART: E:/python/function.py =======================
[2, 2, 3, 4, 5]
2
输出的值确实变了,表传递给函数的是一个指针,指针指向序列在内存中的位置,在函数中对表的操作将在原有内存中进行,从而影响原有变量。 (我们称此为指针传递)

参数检查

在调用函数的时候,如果参数个数不对,Python编译器会自动检测,但是如果类型不对,编译器无法检查。

比如我在本应该传入int参数的时候,传入List类型,此时虽然报错,主要是在print的时候报错。没有进行类型检查 

======================= RESTART: E:/python/function.py =======================
Traceback (most recent call last):
  File "E:/python/function.py", line 6, in <module>
    print(my_square(l))
  File "E:/python/function.py", line 3, in my_square
    a = a*a
TypeError: can't multiply sequence by non-int of type 'list'
所以如果对数据类型需要严格的控制,需要自己检查,比如下面的例子,我传入了一个s,但是函数中不支持字符串

def my_square(a):
    if not isinstance(a,int):
        raise TypeError('bad operand type')
    return a*a

print(my_square("s"))
输出结果如下:可以看到,能够成功的将Error打出来,方便debug

Traceback (most recent call last):
  File "E:/python/function.py", line 7, in <module>
    print(my_square("s"))
  File "E:/python/function.py", line 4, in my_square
    raise TypeError('bad operand type')
TypeError: bad operand type

函数的返回值

函数返回值一般跟在return之后,返回值可以是一个,有可以是多个,比如说我输入一个数,我返回他的2倍和3倍的值,参考例子:

def my_square(a):
    if not isinstance(a,int):
        raise TypeError('bad operand type')
    return 2*a,3*a

print(my_square(5))
输出结果,看来确实是能够返回多个值,但是从打印结果来看,Python将这多个值组织在一个tuple数据类型中,算起来也可以称为返回一个值, 写起来方便的许多。

======================= RESTART: E:/python/function.py =======================
(10, 15)

参考文档

1.http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431679203477b5b364aeba8c4e05a9bd4ec1b32911e2000

2.http://www.cricode.com/92.html










以上是关于Python学习06:函数的主要内容,如果未能解决你的问题,请参考以下文章

python学习06-函数

python学习06

python 学习笔记day06-错误和异常函数基础

Python学习 -06- 函数的参数

Python学习入门教程,字符串函数扩充详解

算法学习LCP 06. 拿硬币(java / c / c++ / python / go / rust)