零基础学Python|Python进阶学习第六天--函数

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家
、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路 关注作者有好处

文末获取源码

三.函数实现模块化编程

在编程语言中,大都通过函数来实现对相关代码的封装,实现模块化编程,完成代码的可重用设置。Python有内置函数和自定义函数。

3.1 函数定义与调用

语法:

def functionname([parameterlist]):
   ['''comments''']
   [functionbody]

* functionname: 函数名
* parameterlist: 参数列表
* comments: 说明
* functionbody : 函数体

示例:定义一个过滤危险字符的函数filterchar()

def filterchar(string):
   '''功能说明:过滤指定的字符串,并将过滤后的结果输出
      没有返回值
   '''
   import re     #导入Python的re模块
   pattern = r'(黑客)|(抓包)|(监听)|(Trojan)'   #模式字符串
   sub = re.sub(pattern,'@_@',string)   #进行模式替换
   print(sub)

调用的函数基本语法。

functionname([parametersvalue])

示例:

str = '我是一名热爱黑客的程序员,喜欢研究Trojan'
filterchar(str)

如果定义一个函数还不知道做什么用,可以使用pass来填充函数体,也可以使用’…'来表示省略代码。

def functionname():
    pass
    
def functionname():
    ...

3.2 参数传递

参数的作用是传递数据给函数使用,在函数体内进行相应的数据处理。

形式参数:简称形参,是指定义函数时,括号里面的参数。就像电影剧本中的角色。

实际参数:简称实参,是指调用函数时,传递的实际参数值。就像出演电影角色的演员。

根据实参的类型不同,又分为值传递(类型为不可变类型)和引用传递(类型为可变类型)。二者的具体区别是,进行值传递时,改变形参的值,实参的值不变;引用传递时,改变形参的值,实参的值也发生改变。

示例:

#值传递和引用传递
def demo(obj):
    print("原值:",obj)
    obj += obj
#调用函数
print("---------值传递--------")
mot = "唯有在被追赶的时候,你才能真正的奔跑"
print("函数调用前:",mot)
demo(mot)
print("函数调用后:",mot)
print("---------引用传递--------")
list1 = ['邓肯','吉诺比利','帕克']
print("函数调用前:",list1)
demo(list1)
print("函数调用后:",list1)

在进行参数传递时,数量和数据类型要求和定义函数时的参数要求保持一致。也可以通过关键字参数来传递,这样就可以不必保持和定义时候的参数位置保持一致了。

比如:

functionname(height=20,width=30,height=50)

参数默认值:也可以为参数指定默认值,这样调用时可以不传参

#函数参数默认值
def abc(str='aaa'):
    print(str)

abc()

可变参数:一种是*parameter ,一种是 **parameter

*parameter : 表示接受任意多个实参放在一个元组中。

示例:

#定义可变参数
def printplayer(*name):   #定义输出我喜欢的NBA球员函数
    print('\n 我喜欢的NBA球员有:')
    for item in name:
        print(item)    #输出球员名称

printplayer('邓肯')
printplayer('邓肯','乔丹','大佛')

如果想使用一个已经存在的列表作为参数,可以在列表名称字前加*

param =['邓肯','乔丹','大佛']
printplayer(*param)

**parameter: 表示接受任多个显示赋值的多个参数,将其放入一个字典中。

#可变参数
def printsign(**sign):
    print()
    for key,value in sign.items():
        print("["+key+"] 的绰号是:"+value)

printsign(邓肯='石佛',罗宾逊='海军上将')

如果想把一个己存在的字典作为可变参数传递,可以在参数名前加 **:

param ={'邓肯':'石佛','罗宾逊':'海军上将'}
printsign(**param)

3.3 返回值

函数执行完后可以返回相关的执行结果。

示例:

#函数返回值
def fun_checkout(name):
    nickname=""
    if name == '邓肯':
        nickname = '石佛'
    elif name == '吉诺比利':
        nickname = '妖刀'
    elif name == '罗宾随逊':
        nickname = '海军上将'
    else:
        nickname = '查无此人'
    return nickname

while FutureWarning:
    name = input("请输入NBA求员的名称:")
    nickname = fun_checkout(name)
    print("球 员:",name,"绰号:",nickname)

3.4 变量的作用域

局部变量:指在函数内部定义的变量,只能在函数内部使用。

全局变量:如果一个变量在函数外定义,那么即可以在函数外使用,也可以在函数内使用;在函数体内定义的变量名前加global关键字,此变量也可以变为一个全局变量。

示例:

#局部变量
def fun_variable():
    var_name = '指南针毕业设计出品'
    print(var_name)

fun_variable()
print(var_name)   #函数名使用局部变量时,抛出 NameError

示例:

#全局变量
var_name = '指南针毕业设计出品'
def fun_variable():
    print(var_name)

fun_variable()
print(var_name)

示例:

#全局变量
def fun_variable():
    global var_name
    var_name = '指南针毕业设计出品'
    print(var_name)

fun_variable()
print(var_name)

3.5 匿名函数

不给函数指定名字,一般是一次性的调用,临时性。

result = lambda[args[,args,..argn]]:expression

* result:用于调用lambda表达式
* [arg1[,arg2,...argn]]:可选参数,用于指定要传的参数列表,多个参数间用,号分隔
* expression:必须参数,用于指定一个实现具体功能的表达式.

示例:计算圆的半径

import math
def circlearea(r):
   result = math.pi*r*r
   return result
r = 10
print("半径为",r,"的圆的面积为:",circlearea(r))

如果用匿名函数实现如下:

import math
r = 10
result = lambda r:math.pi*r*r
print("半径为",r,"的圆的面积为:",result(r))

3.6 Python常用内置函数

在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/whirlwind526/article/details/132402700