python中的函数

函数(function)简介

#函数简介(function)
     - 函数也是对象
     - 函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用
     - 创建函数:
	def 函数名([形参1],[形参2],...,[形参n]):
		代码块
	-函数名必须要符号标识符的规范
		(可以包含字母、数字、下划线、但是不能以数字开头)
	-函数中保存的代码不会立即执行,需要调用函数代码才会执行
	-调用函数:
	     函数对象()
	-定义函数一般都是要实现某种功能的
# 函数的参数
     - 在定义函数时,可以在函数名后的()中定义数量不等的形参,
     	多个形参之间使用,隔开
     - 形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值
     - 实参(实际参数)
     	-如果函数定义时,指定了形参,那么在调用函数时也必须传递实参,
     	    实参将会赋值给对应的形参,简单来说,有几个形参就得传几个形参
def fn():
   print("hello world")

fn是函数对象,fn()是调用函数
print是函数对象,print()是调用函数
#定义形参时,可以为形参指定默认值
#指定了默认值以后,如果用户传递了参数则默认值不起作用
#如果用户没有传递,则默认值就会生效
def fn(a = 5, b = 6, c = 20):
    print('a = ',a)
    print('b = ',b)
    print('c = ',c)

#fn(1,2,3)
#fn(1,2)
#fn()
#实参的传递方式
#位置参数
#位置参数就是将对应位置的实参复制给对应位置的形参
#第一个实参赋值给第一个形参,第二个实参赋值给第二个形参。。。
fn(1,2,3)
#关键字参数
#关键字参数,可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数
fn(a=1,b=2,c=3)
#位置参数和关键字参数可以混合使用
#混合使用关键字和位置参数时,必须将位置参数写到前面
fn(1,c=30)
def fn2(a):
   print('a = ',a)

#函数在调用时,解析器不会检查实参的类型
#实参可以传递任意类型的对象
b = 123
b = True
b = 'hello'
b = None
b = [1,2,3]

#fn2(b)
#fn2(fn)
def fn3(a):
    #在函数中对形参进行重新赋值(则修改的是变量,而不是对象),不会影响其他的变量
    # a = 20
    # a 是一个列表,尝试修改列表中的元素
    #   如果形参执行的是一个对象,当我们通过形参去修改对象时
    #   会影响到所指向该对象的变量   
    print('a = ', a, id(a))
     
    a[0] = 4
    print('a = ', a, id(a))

# c = 10
c = [1, 2, 3]
#fn3(c) #给形参赋值的过程中相当 a = c,而不是 a = 10 或者 a = [1,2,3]

#如果不想在函数内对列表的修改,影响到外部的变量,则可以通过以下方式传递列表的副本
fn3(c.copy()) #通过copy函数,生成一个副本
fn3(c[:])    #通过切片,生成一个副本

print('c = ', c, id(c))

不定长的参数

#在定义函数时,可以在形参前边加一个*,这样这个形参将会取到所有的实参
#它将会将所有的实参保存到一个元组中
#例如前面讲的 a,b,*c = (1,2,3,4,5) #前面讲的元组解包中就使用到了*

# *a会接受所有的位置实参,并且会将这些实参统一保存到一个元组中(装包)
def fn(*a):
   print('a = ',a,type(a))

#fn(1,2,3,4,5)
#带星号的形参只能有一个
#带星号的参数,可以和其他参数配合使用
#第一个参数给a,第二个参数给b,剩下的都保存到c的元组中

def fn2(a,b,*c):
    print('a = ',a)
    print('b = ',b)
    print('c = ',c)
fn2(1,2,3,4,5)
#可变参数不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递
def fn2(a,*b,c):  #这里的参数c必须通过关键字进行传参
    print('a = ',a)
    print('b = ',b)
    print('c = ',c)
fn2(1,2,3,4,c = 5) 
#所有的位置参数都给a,b和c必须使用关键字参数
def fn2(*a,b,c):
    print('a = ',a)
    print('b = ',b)
    print('c = ',c)
fn2(1,2,3,b = 4,c = 5) 
#如果在形参的开头直接写一个*,则要求我们的所有的参数必须以关键字参数的形式传递
def fn2(*,a,b,c):
    print('a = ',a)
    print('b = ',b)
    print('c = ',c)
fn2(1,2,a =3,b = 4,c = 5) 
#形参只能接收位置参数,而不能接收关键字参数
def fn3(*a):
    print('a = ',a)
fn3(a =3,b = 4,c = 5)  #函数会报错
#**形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中
#    字典的key就是参数的名字,字典的value就是参数的值
#**形参只能有一个,并且必须写在所有参数的最后
def fn3(b,c,**a):
    print('a = ',a,type(a)) #{'a': 3, 'e': 10, 'd': 3} <class 'dict'>
    print('b = ',b) # b = 4
    print('c = ',c) # c = 5

fn3(a =3,b = 4,c = 5,e = 10,d = 3)

参数的解包(拆包)

def fn4(a,b,c):
    print('a = ',a)
    print('b = ',b)
    print('c = ',c)
#创建一个元组
t = (10,30,20)

#传递实参时,也可以在序列类型的参数前添加星号,这样他会自动将序列中的元素依次作为参数传递
#这里要求序列中的元素的个数必须和形参中的个数一致,否则报错
fn4(*t)
#创建一个字典
d = {'a':100,'b':200,'c':300}
#通过 **来对一个字典进行解包操作
fn4(**d)

函数返回值

#return 后面跟什么值,函数就会返回什么值
#return 后边可以跟任意的对象,返回值甚至可以是一个函数
#如果仅仅写一个return 或者 不写 return,则相当于return None

def fn4():
    for i in range(5):
        if i == 3:
	    #break      用来退出当前循环
	    #continue   用来跳过当前循环
	    return      #return 用来结束函数
	print(i)
    print("循环执行完毕!")

def fn5():
    return 10

#fn5 和 fn5()的区别
print(fn5)   #fn5是函数对象,打印fn5实际是在打印函数对象,
print(fn5())   #fn5是在调用函数,打印fn5()实际是在打印fn5函数的返回值 10

文档字符串

#help()是python中的内置函数
#通过help()函数可以查询python中的函数的用法
#语法:help(函数对象)
#help(print) #获取print()函数的使用说明
#文档字符串(doc str)
#在定义函数时,可以在函数内部编写文档字符串,文档字符串就是函数的说明
#  当我们编写了文档字符串时,就可以通过help()函数来查看函数的说明
#  文档字符串非常简单,其实直接在函数的第一行写一个字符串就是文档字符串
#也可以同时在函数的形参上指定参数的类型(如:a:int,b:bool,c:str),这里只是说明,并不是强制要求必须传递指定的类型,及返回值类型(->int),包括返回值类型也是说明性的,并不是强制返回值类型必须是int.
#参数a建议传递int类型,参数b建议传递bool类型,参数c建议传递str类型,函数返回值类型为int
def fn(a:int,b:bool,c:str)->int: 
   '''
   这是文档字符串
   函数的作用:。。。。
   函数的参数:
   	a,作用,类型,默认值。
   	b,作用,类型,默认值。
   	c,作用,类型,默认值。
   函数的返回值
   '''
   return 10

help(fn)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值