/* 看板娘 */ /* 粒子吸附*/

函数:函数的基本使用、函数参数的使用

一、函数的基本使用

1、什么是函数  

    函数就类似于具备某一功能的工具,提前定义好之后可以反复使用(即:函数就是盛放代码和功能的容器)

 

1.1函数的使用原则:

  先定义 后调用

  为何要用函数==>解决下述问题:

  • 1.代码组织结构不清晰、过于冗余、可读性差
  • 2.代码没有返回值(无法使用之后的返回结果)
  • 3.兼容性、可维护性、可扩展性差、修改繁杂等等

如何用函数

  • 先定义------> 三种定义方式
  • 后调用------> 三种调用方式
  • 返回值------> 三种返回值的形式

2、函数定义语法

def 函数名(参数1,参数2,参数3,...):
    '''函数的注释'''
    函数体代码
    return 返回值
'''
1.def: (必须)
      定义函数的关键字;
2.函数名:(必须)
        函数名指向函数内存地址,是对函数体代码的引用。函数的命名应该反映出函数的功能;
3.括号冒号:(必须)
        括号后要加冒号,然后在下一行开始缩进编写函数体的代码;
4.参数:(可选)
        括号内定义参数,参数是可有可无的,且无需指定参数的类型;
5.函数注释: (可选)
      描述函数功能,参数介绍,非必要,但是建议加上,从而增强函数的可读性;
6.函数体:(必须)
        由语句和表达式组成;
7.return值:(可选)
        定义函数的返回值,return是可有可无的。
'''

3、函数的定义与调用

  

   定义函数

    定义函数发生的事情

  • 1、在内存空间中申请一块内存空间存储函数体代码

  • 2、将函数体代码所在的内存空间地址绑定给函数名

  强调:定义函数只检测语法,不执行代码

def login():  # login = 函数的内存地址
    print(111)  # 函数体代码
    print(222)

    
x = 10  # x = 10的内存地址
print(x)  # 10
'''
原则上打印应该返回内存地址,但是返回的是值。
变量名受到python解释器特殊照顾由内存地址直接找到返回值打印。
'''
print(login)  # <function login at 0x7fa136db91f0>
'''
但函数名不同,打印显示的是内存地址。定义函数的目的是为了把代码丢到容器,
只需要运行不需查看。则无需被照顾。
'''

调用函数

调用函数发生的事情:

  • 1、先通过函数名定位到函数的内存地址

  • 2、函数名加括号会触发函数体代码的运行

强调:调用函数才会执行函数体代码

 

# 示例:
def login(): 
    print('hello') 
   
login()  # hello 触发函数体代码的运行

# 语法错误
def func():
    print(111  # 无效语法,定义阶段都无法通过

# 逻辑错误
def func():
    print(111)
    x  # x 没有定义,变量名也需要先定义后引用
          
func()  # 调用肯定出错

# 示例:
def bar():
    print('from bar')

def foo():
    print('from foo')
    bar()
foo()
'''
from foo
from bar
'''
          
# 语法错误         
def foo():
    print('from foo')
    bar()
          
foo()  # bar没有定义,调用肯定出错
          
def bar():
    print('from bar')

4、定义函数的三种形式

1.无参函数

  • 函数在定义阶段括号内没有参数
# 函数体不需要外部传参数进行,它本身代码就是固定的,所以就是无参函数
def say():
    print('welcome to here')
    
say()

# 参数是函数的调用者向函数体传值的媒介,有参无参是根据函数体代码去走的,看函数体代码是否需要外部传参数
def login():
    inp_name = input("请输入用户名>>>: ").strip()  
    inp_pwd = input("请输入密码>>>: ").strip()
    if inp_name == "jack" and inp_pwd == "123":
        print('登录成功!')
    else:
        print("用户名或密码错误")

login()  # 直接调用无需传参数,input功能已经实现与用户交互

2.有参函数

  • 函数在定义阶段括号内有参数
# 函数体代码需要外部传参数进行,这种函数就需要定义为有参函数
def max2(x, y):  # 参数---》原材料 
    if x > y:
        print(x)
    else:
        print(y)
max2(10,20)

3.空函数

  • 函数在定义阶段括号内没有参数,并且函数体代码为空(pass)
# 函数体为pass代表什么都不做,称之为空函数。定义空函数通常是有用的,因为在程序设计的开始,往往是先想好程序都需要完成什么功能,然后把所有功能都列举出来用pass充当函数体“占位符”,这将使得程序的体系结构清晰且可读性强。例如要编写一个程序,我们可能想到的功能有用户认证,下载,上传,等功能,可以先做出如下定义:

def auth_user():
    """用户认证"""
    pass   # 代表占位符

def download_file():
    """下载文件"""
    pass

def upload_file():
    """上传文件"""
    pass

调用函数的三种形式

# 1.语句
len("hello")  # 单纯的调用,例如len统计hello的长度

# 2.表达式
res = len("hello")  # 将调用函数的返回值赋值给res

res = len("hello") * 10  # 将调用函数的返回值乘以10的结果赋值给res
print(res)

# 3 .可以当做参数传给另外一个函数
len("hello")  # 从形式上看就是将函数调用,从本质讲是跟2同理
print(len("hello"))  # 先调len的返回值然后再赋值给print

函数的返回值

return 详解

def max(x, y): 
    if x > y:
        return x
    else:
        return y
    
res = max(10, 20)
print(res)

1、return是一个函数结束的标志,函数可以有多个return,但只要执行一次return,整个函数就立即结束,并且将return后的值当做本次调用的结果返回

def func():
    print("=====")  # 只运行到了此行
    return 111  # return后的值当做本次调用的结果返回
    print("****")  # ruturn 下面的值不会被执行
    return 222

res = func()
print(res)
'''
=====
111
'''
  • 2、return后的返回值有三种情况

    • 1)函数内可以没有return 或者 return None 或者 return:返回的都是None
    • 2)return 值:返回的就是这一个值
    • 3)return 值1,值2,值3:会自动组织成一个元组返回
# 示例1:
def func():
    print(111)
    return
    print(2222) 

res = func()
print(res)

'''
111
None
'''

# 示例2:
def func():
    return 111,"xxx",[22,33]

res = func()
print(res)  # (111,"xxx",[22,33])返回的是元组

 

posted @ 2022-01-11 17:18  红绿灯的黄呀  阅读(590)  评论(0)    收藏  举报