函数的简介与基本使用

函数的简介

image

函数就是类似于是打包好的工具,提前定义好之后可以反复使用
	在代码中函数 可以解决代码冗余,结构不清晰,修改繁杂等问题

image

函数的语法结构

def 加函数名 (参数1,参数2):   # def 和函数名是必须的,参数是可选
	'''函数注释'''			  # 函数注释是可选的	
	 函数体代码			      #  函数体代码是必须的
	return 返回值			   #  return返回值是可选的

'''
1.函数必须遵循先定义后引用
2.函数在定义阶段只检测函数体整体语言,不执行函数代码
3.函数在调用阶段才会执行函数体代码
	如何调用?
		函数名加括号 (果函数在定义阶段有参数则在调用阶段也需要给参数)
'''
函数在定义与调用阶段底层原理
1.在内存空间中申请一块空间存储函数体代码
2.将函数体代码所在的空间地址绑定给函数名
3.函数名加括号则会执行函数体代码

函数的分类image

1.无参函数
	函数在定义阶段括号内没有参数
例如:
def func():						# func是函数名
	print('hello world!')		# 函数体代码
    
2.有参函数
	函数在定义阶段括号内有参数.引用时要传入参数。
def func(x,y):
    print(x,y)
# 传参数的三种方法:
# 第一种:按位置传入参数
func(1,2)
# 第二种:按参数名传入参数
func(y=2,x=1)
# 第三种:混合使用
func(1,y=2)

3.空函数
	函数在定义阶段括号内没有参数并且函数体代码为空(pass)
空函数的应用场景:
比如说,我们想要编写一个注册登录系统,可以先定义一个注册功能的函数,一个登录功能的函数。
# 1.先搭个框架
def register():
    print('注册功能')
def login():
    print('登录功能')
# 2.定义一个字典,这个字典我们可以用编号来定义函数名
func_dic = {'1':register,'2',login}  
# 这里的函数名后面没有加上括号,只有加上括号的函数名才会执行函数体代码
# 3.来个循环获取用户需求。
while True:
    print('''
    1.注册
    2.登录
    ''')
    choice = input('输入要执行的功能>>>:').strip
    # 4.判断用户需求是否是这个字典的K(字典默认暴露K)
    if choice in func_dic:
        func_name = func_dic.get(choice)
    # 5. 执行函数体代码。
        func_name()
    else:
        print('功能编号不存在。')

'''
空函数虽然没有什么实际上的意义,
但是空函数可以提前规定好编写代码的思路
'''

image

函数的返回值

image

1.函数体代码没有return关键字
	默认返回值是None
    
2.函数体代码只有关键字return后面没有跟内容
	默认也是返回None
    函数体代码遇到return立刻结束
    
3.函数体代码有关键字return并且后面跟了数据
	跟了什么就返回什么
    如果跟了多个数据逗号隔开会自动组织成元祖返回

函数参数的两大分类image

形式参数
	在函数定义阶段括号内所填写的参数,简称"形参"
    	def func (a,b):
            pass
        # a和b就是函数func的形参
实际参数
	在函数调用阶段内传入的参数,简称"实参"
    	func(1,2)
        # 数据1和2就是函数func的实参
"""
形参与实参的关系
	我们可以将形参看成是变量名,实参看成是变量的值
		两者在函数调用阶段临时绑定,函数运行结束断开
		
形参的表现形式只有一种,就是变量名
实参的表现形式有很多种,但是核心就是数据值
"""

位置参数image

位置参数
	按照从左到右的顺序依次填入的参数
位置形参
	在函数定义阶段括号内按照从左到右的顺序依次填入的变量名
位置实参
	在函数调用阶段括号内按照从左到右的顺序依次传入的数据值
# 定义一个可以比较大小的函数(传入两个值,返回较大的)
def func(a, b):
    if a > b:
        return a
    else:
        return b
res = func(5, 8)
print(res)
关键字实参(可以打破位置顺序)
	在函数调用阶段通过形参名=数据值的形式指名道姓的传值
'''
1.位置形参与位置实参在函数调用阶段  按照位置一一对应绑定
2.位置参数在绑定的时候多一个报错少一个也报错。
'''
# 一般来讲,参数格式越简单的越靠前,格式越复杂的越靠后

image

默认参数image

默认参数
	默认形参
    	函数在定义阶段就可以给形参赋值了。
        	1.该形参在函数调用阶段如果不给值,则使用默认的。
            2.该形参在函数调用阶段也可以重新赋值,如果重新赋值,则使用你赋予的值。
# 定义学员的注册功能
def register(name,age,gender='male'):
    print('%s:%s:%s'% (name,age,gender))
register('tony',18) # tony:18:male
register('jason', 28) # jason:28:male
register('kevin', 38) # kevin:38:male
register('lili', 18, 'female') # lili:18:female 这里也可以不在默认形参前输入参数名
register('lili', 18, gender='female') # 'lili', 18, gender='female'   在female前输入参数名
'''
位置形参与默认形参在定义的时候,位置形参必须在默认形参前面。
'''

可变长参数(重要)

image

 1.函数无论传入多少位置参数都可以正常运行
    可变长形参
    def func(*a):
    	print(a)
func()  # ()
func(1)  # (1,)
func(1, 2, 3, 4, 5, 6, 7)  # (1, 2, 3, 4, 5, 6, 7)
      
    
    def func(x,y,*a)
    	print(x,y,a)
func(1,2)  # 1 2 ()
func(1,2,3,4,5,6,7,8,9)  # 1 2 (3, 4, 5, 6, 7, 8, 9)


'''
*号在形参中的使用
	用于接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名
'''



2.函数无论传入多少关键字参数都可以正常运行
def index(**b):
    print(b)
index()  # {}
index(a=1,b=2,c=3,d=4)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}


def index(x, y, **b):
    print(x, y, b)
index(y=2, x=1)  # 1 2 {}
index(y=2, x=1, u=222, k=111, l=444)  # 1 2 {'u': 222, 'k': 111, 'l': 444}
"""
**号在形参中的使用
    用于接收多余的关键字参数 并组织成字典的形式赋值给**号后面的变量名
"""



3.定义一个函数无论传入多少位置参数和关键字都可以正常运行
def index(*a,**b):
    print(a,b)
index()  # () {}
index(1,2,3,4)  # (1, 2, 3, 4) {}
index(a=1,b=2,c=3)  # () {'a': 1, 'b': 2, 'c': 3}
index(1,2,3,4,a=1,b=2,c=3)  # (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}


"""
墨守成规
    可变长形参 *与**后面的变量名其实是可以随便定义的
    但是python中推荐使用
        *args  
        **kwargs 
def index(*args, **kwargs):
    pass
"""



def index(a, b, c):
    print(a,b,c)
new_list = [11,22,33]
index(new_list)   # 肯定不行  列表是一个整体 相当于一个实参
#  但是换成下面这样
index(new_list[0],new_list[1],new_list[2]) # 这样是可以的,按照索引去赋值


'''如果index形参是*args 列表里面有很多元素 如何实现按照位置一一传入'''
def index1(*args):
    print(args)
new_list1 = [11,22,33,44,55,66,77,88,99]
index1(*new_list1)  # index1(11,22,33,44,55,66,77,88,99)



"""
**号在实参中的使用
    会将字典内的键值对打散成关键字参数传入
"""
def index2(**kwargs):
    print(kwargs)
new_dict = {'username':'jason','pwd':123}
index2(**new_dict)  # index2(username='jason',pwd=123)
{'username': 'jason', 'pwd': 123}


image
image
image
image
image

函数参数补充(了解)

image

命名关键字参数
	def register(name,age,*,sex,height):
        pass

    # register('jason',18,'male',183)
    register('lili',18,sex='male',height='1.8m') #正确使用
    """
    sex height在传入实参的时候必须以关键字参数的形式

    ps:该类型的参数几乎不用 也几乎很少能碰到
    """

以上就是函数和函数的基本使用。下一章介绍名称空间

posted @ 2021-11-15 19:10  林先生。  阅读(284)  评论(0)    收藏  举报