函数
定义:完成待定功能一段代码
def 函数名([参数1],[参数2]....[参数n]):
函数体
res = area(10)
print(res)
print(area(10))
函数命名名:
不能和系统函数重名,否则系统函数无法使用
函数定义分两部分函数头和函数体
函数体,就是实现功能的代码段,以:开头,必须缩进
函数名的命名风格:一般建议用下划线分隔的小写单词组成:say_hello
函数的优点:
代码可复用
代码可维护性高
容易排错
可读性好
利于团队开发
注意:
冒号不能省略
函数体必须缩进
函数名不要和系统函数重名
def add(a, b):
res = a + b
return res
print(add(3,4))
函数参数
1 实参和形参
形参:就是函数定义时小括号里的变量
实参:函数调用的时候,小括号里的表达式
函数可以没有形参和实参
2 参数分类
位置参数:要求实参顺序必须和形参顺序完全一致,由形参顺序决定实参顺序
def say_hello(name,age,home):
print('大家好,我是{},我今年{}岁了,我来自
{}'.format(name,age,home))
say_hello('王二妮',18,'湖北武汉')
关键字参数:函数调用时,实参可以是键值对,键就是形参名字,这样的调
用,实参不必关心形参的顺序
def say_hello(name,age,home):
print('大家好,我是{},我今年{}岁了,我来自
{}'.format(name,age,home))
say_hello(name='王傻',home='大连',age=20) #三个关键字参数
say_hello('大傻',home='美国',age=30) #两个关键字参数
sya_hello('二傻',24,home='何方') #一个关键字参数
默认值:如果形参在定义的时候给定一个值,那么函数在调用时就可以不传实
参,可以简化调用
默认值参数必须放到最右边
如果传了实参,那么实参优先,不会使用默认值
默认值只计算一次
默认值必须是不可变对象
my_power(x,n=2):
return (x) ** n
my_power(3)
my_power(4,0.5)
def test(a=[]):
a.append('end')
print(a)
test([1,2,3])
test() #['end']
test() #['end','end']
可变参数:传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0
个。
#使用*接收任意数量的位置参数
#注意:*的不定长参数被当做元组处理
def demo(a,b,*args):
print(a,b,args)
demo(12,33,90)
demo(1,2,3,4,5)
a=(1,2,3)
demo(*a)
#使用**接收任意数量的关键字参数
#注意:**的不定长参数被当做字典处理
def demo1(a,**args):
print(a,args)
demo1(1,name='kk',age=3)
b = {'a':20,'b':12,'c':32}
demo(**b)
参数组合
形参顺序须按照以下顺序:位置参数、默认值参数、*args,**kwargs
命令行参数(了解)
如果要获取命令行下传给python文件的参数可以使用体统模块sys的argv来获取
参数个数:len(sys.argv)
文件名:sys.argv[0]
参数:sys.argv[1],sys.argv[2]…
# 文件名: 1.py
import sys
print(len(sys.argv))
print(sys.argv[0])
print(sys.argv[1])
函数调用
函数调用必须在函数定义之后
函数调用必须能够正确传递实参
def demo(a,b,c=0,*arg1,**arg2):
print(a,b,c,arg1,arg2)
demo(1,3,k=4)
demo(1,2,3,4,5)
demo(1,b=3,c=3,d=5)
demo(*(1,2,3),**{'name':12}) #任何函数都可通过这种形式传递参数
返回值
return 表达式
return 会结束调用,return下面不要写代码
return 不是必须的
如果函数没有返回值,默认返回None
def demo2():
return 1
def demo3():
return 1,2,3
print(demo2())
print(demo3()) #(1,2,3)
返回多个数据
def demo():
return 1,2,3
print(demo())
文档字符串
函数文档字符串documentation string (docstring)是在函数开头,用来解释其
接口的字符串。简而言之:帮助文档
包含函数的基础信息
包含函数的功能简介
包含每个形参的类型,使用等信息
文档字符串书写规则:
必须在函数的首行
使用三引号注解的多行字符串(’’’ ‘’’) 或(""" “”")
函数文档的第一行一般概述函数的主要功能,第二行空,第三行详细描述。
def test():
"""
函数名:test
功能:测试
参数:无
返回值:无
"""
print("函数输出成功")
#使用__doc__属性查看文档字符串
print(test.__doc__)
参数传递(**)
python的参数传递是简单的值传递,当然这里的值是指变量的引用(地址),不
是变量的值。不存在值传递和引用传递的区分。简而言之,python的参数传递可
以称之为对象引用传递,对象可以分为:
不可变对象:int、float、None、complex、bool、tuple、str,range
在函数内部不可能修改函数外部的变量
可变对象: dict、list
可以在函数内部修改
x = 10
y = 5
def swap(a, b):
# a,b是局部变量
a,b = b,a
print("交换前:{}--{}".format(x,y))
swap(x,y)
print("交换后:{}---{}".format(x,y))
空函数
借助于pass语句实现,函数体不完成任何功能,只有一个pass语句
def test():
pass # 占位符