python的函数(一)

函数

我们写过九九乘法表,但如果我要七七乘法表或五五乘法表的话,你会看到三者代码极其类似,只是循环变量不同,那么如何做到代码重用,而不是简单拷贝黏贴修改呢,其实可是使用函数完成这一功能

def table(row,col):
    for i in range(1, row + 1):
        for j in range(1, col + 1):
            if j <= i:
                print("%d*%d = %2d" % (i, j, i * j), end=' ')
        print('')
#一次编码,到处运行
table(8,8)
table(5,5,8)

函数的优点:

  • 代码可复用
  • 代码可维护性高
  • 容易排错
  • 可读性好
  • 利于团队开发

1.函数定义

函数就是完成特定功能的代码块,本质上是对代码的封装。 语法格式

def 函数名([参数1],[参数2]....[参数n]:
	函数体
  • 函数名命名规则同变量名,要满足标识符命名规则
  • 不能和系统函数重名,否则系统函数无法使用
  • 函数定义分两部分函数头和函数体
  • 函数体,就是实现功能的代码段,以:开头,必须缩进
  • 函数名的命名风格:一般建议用下划线分隔的小写单词组成:say_hello

2 函数参数

2.1 实参和形参
  • 形参:就是函数定义时小括号里的变量
  • 实参:函数调用的时候,小括号里的表达式
  • 函数可以没有形参和实参
2.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='何方')    #一个关键字参数
  • 默认值,如果形参在定义的时候给定一个值,那么函数在调用时就可以不传实参,可以简化调用
  • 默认值参数必须放到最右边
  • 如果传了实参,那么实参优先,不会使用默认值
  • 默认值只计算一次
  • 默认值必须是不可变对象
def 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

3 函数调用

  • 函数调用必须在函数定义之后
  • 函数调用必须能够正确传递实参
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})  #任何函数都可通过这种形式传递参数

4 返回值

可以通过return语句返回计算结果。语法: return 表达式

  • return的作用一个是终止函数的执行,所有执行了return后,其后的语句不会被执行
  • 如果没有return语句,则默认返回的是None
  • return还可以返回给调用者数值
  • return可以返回一个值,如果要返回多个值,那么返回的是一个元组
def demo2():
    return 1
def demo3():
    return 1,2,3
print(demo2())
print(demo3())  #(1,2,3)

5.参数传递(**)

python的参数传递是简单的值传递,当然这里的值是指变量的引用(地址),不是变量的值。不存在值传递和引用传递的区分。简而言之,python的参数传递可以称之为对象引用传递,对象可以分为:

  • 不可变对象:int、float、None、complex、bool、tuple、str,range
    • 在函数内部不可能修改函数外部的变量
  • 可变对象: dict、list
    • 可以在函数内部修改

6.空函数

借助于pass语句实现,函数体不完成任何功能,只有一个pass语句,pass是占位符,只是为了保持语法完整性,没有实际意义

def test():
    pass # 占位符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值