首页 > 编程语言 >Python入门(9)——函数

Python入门(9)——函数

时间:2022-11-25 14:05:45浏览次数:38  
标签:__ 入门 Python name 对象 print id 函数

函数是带名字的代码块,用于完成特定的任务,当在程序中多次执行同一任务时,无需反复编写重复的代码块,只需调用执行该任务的函数即可。


函数的声明


    在Python中使用 def 关键字来声明函数,每个函数都有一个的函数名,我们通过函数名调用函数。在函数名后面的圆括号中可以放置传递给函数的参数,当然函数也可以没有参数,没有参数的函数叫做无参函数。函数内容以 : 开始,并且函数体要缩进。在函数执行完成后可以通过 return 关键字来返回一个值给调用方,没有 return 语句相当于返回None。有关函数的说明写在声明函数的下方,称为文档字符串的注释,描述了函数的功能,用三引号括起,Python使用它们生成有关程序中函数的文档。下面的例子演示了如何声明一个无参函数并调用此函数。

def print_hello():
"""打印字符串“Hello”"""
print('Hello!')


print_hello()

输出结果为

Hello!


下面的例子演示了如何声明一个含两个参数的函数并调用此函数。

def max(x, y):
"""返回两个数中较大的数"""
if x > y:
return x
else:
return y


print(max(3, 7))

最终程序运行的结果为

7



参数的传递

    在Python中,对象可分为两类,一类是不可更改的对象,另一类则是可更改的对象。在传递参数过程中,如果传入的是不可更改的对象,则传递的只是值本身,调用函数后不会对原来的对象产生影响,例如:整数、字符串、元组等。但如果传入的是可更改的对象,则是对原来的对象进行操作,调用函数后,在此函数中对此对象进行的修改就是对原来的对象进行修改,例如列表、字典等。当然,不可更改的对象与可更改的对象这类说法不太严谨,在Python官方文档中也没有这种说法,这里只是为了区分出调用函数时更改的对象不同。下面的例子演示了传递不可更改对象的函数调用。

def not_change(x):
print('id(x) = ', id(x)) # 指向同一个对象
print('x = ', x) # x的值为传进来的参数值
x = 0 # 创建了新对象
print('x = ', x) # 新对象的值为0
print('id(x) = ', id(x))


if __name__ == '__main__':
y = 10
print('id(y) = ', id(y)) # 查看y指向的对象id
not_change(y) # 调用函数
print('y = ', y) # 调用后y的值并不会改变
print('id(y) = ', id(y)) # y还是指向调用函数前的对象

输出结果为

id(y) =  2719015594576  # 调用函数前y指向的对象id
id(x) = 2719015594576 # 参数指向的对象id
x = 10 # 此对象中的值
x = 0 # 新建对象的值
id(x) = 2719015594256 # 新建对象的id
y = 10 # 调用函数后y的值没变
id(y) = 2719015594576 # y还是指向调用前的那个对象


下面的例子演示了传递可更改对象的函数调用。

def change(list):
print('id(list) = ', id(list)) # 指向同一个对象
print('list = ', list) # list的值为传进来的参数值
list.append(100) # 直接在此对象上进行操作
print('list = ', list) # 操作后list的值更新了
print('id(list) = ', id(list)) # 对象还是传进来的那个对象


if __name__ == '__main__':
x = [10, 20, 30]
print('id(x) = ', id(x)) # 查看x指向的对象id
change(x) # 调用函数
print('x = ', x) # 调用函数后x指向的对象已经发生了改变
print('id(x) = ', id(x)) # 但对象id还是原来的那个对象

输出结果为

id(x) =  2074989554688          # 调用函数前x指向的对象id
id(list) = 2074989554688 # 参数指向的对象id
list = [10, 20, 30] # 此对象中的值
list = [10, 20, 30, 100] # 修改后此对象中的值
id(list) = 2074989554688 # list还是指向刚刚的对象
x = [10, 20, 30, 100] # 函数中修改的是传进去的对象,值已经发生了改变
id(x) = 2074989554688 # id值还是不变




向函数传递实参


向函数传递实参的方式有位置实参、关键字实参、任意数量实参等方式。


Python入门(9)——函数_python

位置实参

Python入门(9)——函数_调用函数_02


位置实参的传入必须与函数声明时参数的顺序一致。

def print_hello(name, age):
print(f'Hello! I am {name}, I am {age} years old.')


if __name__ == '__main__':
name = 'Mary'
age = 20
print_hello(name, age)

输出结果为

Hello! I am Mary, I am 20 years old.


Python入门(9)——函数_python

关键字实参

Python入门(9)——函数_调用函数_02


关键字实参方式可以在调用函数时使用关键字来确定传入的参数值,即在调用函数时参数的顺序可以不按声明时的顺序书写。

def print_hello(name, age):
print(f'Hello! I am {name}, I am {age} years old.')


if __name__ == '__main__':
a = 'Mary'
b = 20
print_hello(age=b, name=a)

输出结果为

Hello! I am Mary, I am 20 years old.



Python入门(9)——函数_python

默认参数

Python入门(9)——函数_调用函数_02


在声明函数时,可以在参数的后面添加参数的默认值,在调用函数而没有给定相应的参数时,会使用默认参数。注意:默认参数必须放在最后面

def print_hello(name, age = 20):
print(f'Hello! I am {name}, I am {age} years old.')


if __name__ == '__main__':
name = 'Mary'
print_hello(name)

输出结果为

Hello! I am Mary, I am 20 years old.


Python入门(9)——函数_python

任意数量实参

Python入门(9)——函数_调用函数_02

有时候需要在函数中处理未知数量的参数,在声明函数时,可以使用 * 号标明传入一个元组形式的参数,调用函数时,会把收到的所有值都封装到这个元组中。

def print_numbers(*numbers):
print(numbers)


if __name__ == '__main__':
print_numbers(0, 1, 2, 3, 4, 5)

输出结果为

(0, 1, 2, 3, 4, 5)


除此之外,还有带 ** 两个星号的写法,标明传入一个字典形式的参数。

def print_keys_value(**dict):
print(dict)


if __name__ == '__main__':
print_keys_value(name='Mary', age=20)

输出结果为

{'name': 'Mary', 'age': 20}




函数的返回值

使用 return 语句可以指定该函数的返回值。对于没有return语句的函数定义,Python都会在末尾加上 return None ,使用不带值的return语句,也返回None。

def sum(*numbers):
total = 0
for x in numbers:
total += x
return total


if __name__ == '__main__':
print(sum(0, 1, 2, 3, 4, 5))

输出结果为

15




Lambda表达式

在Python中可以使用 Lambda 表达式创建匿名函数。Lambda 的主体是一个表达式,而不是一个代码块。Lambda 函数不能访问自己参数列表之外或全局命名空间里的参数。Lambda 表达式的格式为 lambda 参数列表:表达式 。

sum = lambda x, y: x + y


if __name__ == '__main__':
print(sum(4, 5))

输出结果为

9




调用模块中的函数

在工程项目中会经常遇到同名函数问题,即两个模块中都有一个函数名一样但功能不一样的函数,这时,如果要调用其中的一个函数,必须指定模块名。下面的例子演示了如何调用不同模块的同名函数。

# p1.py
def fuction():
print('p1 function')
# p2.py
def fuction():
print('p2 function')
# main.py
import p1
import p2


if __name__ == '__main__':
p1.fuction()
p2.fuction()

输出结果为

p1 function

p2 function


我们也可以在导入模块时给模块起别名,通过别名调用模块中的函数。

import math as m


if __name__ == '__main__':
print(m.fabs(-2))




标签:__,入门,Python,name,对象,print,id,函数
From: https://blog.51cto.com/u_15891283/5886624

相关文章

  • Python入门(10)——类
    在Python中,一切都是对象,对象是类的实例,类是对象的蓝图和模板。类是一个抽象的概念,对象是一个类具体的实例。每个对象都有属性和行为,它们都是独一无二的,而且对象一定属于某个......
  • Python入门(8)——集合
    集合的创建    集合是由不重复元素组成的无序容器。创建集合用 {} 大括号或 set() 函数。注意,创建空集合只能用 set() ,不能用 {} , {} 创建的是空字典。......
  • 最全的Python海龟绘图总结
    在Python中使用海龟绘图,需要导入相应的模块,那么什么是模块呢?逻辑上来说模块就是一组功能的组合;实质上一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上......
  • Python入门(7)——元组与字典
    元组元组的定义    不可修改的列表称为元组。元组定义与列表定义的区别在于列表使用 [] 标识,而元组使用 () 标识。严格地说,元组是由逗号 , 标识的,圆括号只是让......
  • Python入门(5)——分支与循环
    使用功能更强大的IDEPyCharm是一款功能强大的Python编辑器,具有跨平台性。学习分支语句及循环语句,为了我们调试方便,我们后期选择使用PyCharm,PyCharm可以直接到官网下载......
  • Python入门(6)——列表
    列表的定义列表是由一系列按特定顺序排列的元素组成。列表可以包含不同类型的元素。列表内元素的值可以重复。列表通常用单词名称的复数表示。列表用方括号 [] 表示,元素......
  • Python入门(3)——基本数据类型及运算符
    常见的几种基本数据类型python是弱类型语言,相对于强类型语言,它不需要声明变量的类型。在Python中一切都是对象。可以使用id()函数查看此对象的id。Python中的数据类型很多,而......
  • Python入门(4)——最全的字符串操作
    修改字符串大小写title():把字符串中每个单词首字母改为大写。upper():把字符串中所有字符改为大写。lower():把字符串中所有字符改为小写。>>>'theintroductiontopython'.......
  • Python入门(2)——变量与常量
    IDLE-Python集成开发环境刚开始学习Python,我们可以直接使用Python自带的IDE——IDLE进行编程。在Windows开始菜单中,搜索IDLE,打开即可进行Python编程。接下来一段时间,我们先......
  • Python入门(1)——搭建环境
    Life is short,you need Python.--BruceEckel​“人生苦短,我用Python”Python由荷兰数学和计算机科学研究学会的GuidovanRossum于1990 年代初设计。因其简单易学,如......