python函数基础

函数的定义:


函数是一段具有特定功能,可重用的语句组


定义函数
def 函数体([形式参数]):
      函数体
(1)以def开头
(2)形参不用声明其类型
(3)函数体中使用“return[表达式]”,结束函数的运行,将流程返回到调用处,并返回表达式计算的结果,返回值时,如果数据超过一个,返回一个元组

import math as m
def function(a,b,c):
    p=(a+b+c)/2
    s=m.sqrt(p*(p-a)*(p-b)*(p-c))
    return s
x=eval(input('请输入三角形的三个边'))
y=eval(input('请输入三角形的三个边'))
z=eval(input('请输入三角形的三个边'))
if x+y>z and x+z>y and y+z>x and x>0 and y>0 and z>0:
    print(function(x,y,z))
#输出:2 2 2
#结果为:1.7320508075688772


函数的调用


格式:
函数名([实际参数列表]) 
变量名=函数名([实际参数列表])
参数传递方式


1.按值传递


形参在接受参变量的值时,相当于创建一个参数对象,此时,形参和实参是两个单独的变量(使用不同的存储空间),在值传递过程中
函数对形参的任何操作都不会影响到实参,因为实参和形参是两个不同的变量

def fun(n):
    f=1
    for i in range(1,n+1):
        f*=i
    return f
#阶乘公式



2.按引用传递


如果将列表,集合,字典作为函数的参数,实参和形参的传递方式是按引用传递。实参是将地址传给形参,即形参和实参指向的是
相同的内存单元,如果在函数中改变了形参的值,函数调用结束后实参值也会发生变化

def timelist(lst,n):
    for i in range(len(lst)):
        lst[i]=lst[i]*n
#主程序
list1=list(range(1,10))
print("调用时的列表",list1,";地址:",id(list1))
#调用时的列表 [1, 2, 3, 4, 5, 6, 7, 8, 9] ;地址: 1407234223816
timelist(list1,2)
print("调用时的列表",list1,";地址:",id(list1))
#调用时的列表 [2, 4, 6, 8, 10, 12, 14, 16, 18] ;地址: 1407234223816


位置参数


按位置传递的参数称为位置参数,python语言中的参数传递时按位置传递,即形参按位置顺序传给对应的参数,有多少个形参,就要有多少个实参,两者的数目和顺序必须完全一致

def volume(l,w,h):
    volume=l*w*h
    return volume
a,b,c=eval(input('输出长方体的长,宽,高,以逗号分隔:'))
v=volume(a,b,c)
print(v)
#输出长方体的长,宽,高,以逗号分隔:1,2,3
#6


默认值参数


def 函数名(非默认参数列表,形参名1=默认值1,......)
    函数体
def print_charnum(ch1,n=2):
    print((ch1+" ")*n)
str1="青山绿水,金山银山!"
print_charnum(str1)
print_charnum(str1,n=1)
# 青山绿水,金山银山! 青山绿水,金山银山! 
# 青山绿水,金山银山!

 
关键字参数


通过  “形参名=实参值“的形式传递给形参,使得参数可以不按位置顺序来传递,让函数参数的传递更加清晰,易用

def resume(sname,ssex,sage=19):
    print("{},{},{}".format(sname,ssex,sage))
resume("张三","男")
resume("李四",sage=20,ssex="女")
# 张三,男,19
# 李四,女,20

可变长度参数

1.使用一个‘*’的形参

函数定义时,如在形参名前加一个‘*’,表示该形参可以接收多个值并将接收的多个值存放在一个元组。定义格式如下:

def 函数名([形参列表]*args):

      函数体

注意:函数采用前缀为‘*’的可变长度参数,实参不能是关键字参数

def mulnum_sum(*num):
    sum=0
    for i in num:
        sum+=eval(i)
    return sum
numstr1=input("请输入多个可计算的数(数与数之间用逗号隔开):")
input_list=numstr1.split(",")
print("输入的数之和:",mulnum_sum(*input_list))
# 请输入多个可计算的数(数与数之间用逗号隔开):1,2,3,4
# 输入的数之和: 10

2.使用两个*的形参

表示形参可以函数接收多个值并将其存放在字典中

def mulnum_sum(**num):
    print(num)
mulnum_sum(str1="我环保",str2="我健康")
# {'str1': '我环保', 'str2': '我健康'}

3使用带'*'的实参

加*可以使用列表,元组,集合及其它迭代器作为实参进行参数传递,在调用函数时,python解释器会将序列中的值分别传递给多个单变量的形参 

def func(p1,p2,p3):
    print(p1,p2,p3)
list1=[11,22,33]
func(*list1)#实参为列表,变量加前缀"*"
tup1=(11,22,33)
func(*tup1)#实参为元组,变量加前缀"*"
dict1={'p1':1,'p2':2,"p3":3}
func(*dict1)#输出字典的键
func(**dict1)#输出字典的值
set1={"a","b","c"}
func(*set1)#实参为集合,变量加前缀"*"
range1=range(1,4)
func(*range1)
# 11 22 33
# 11 22 33
# p1 p2 p3
# 1 2 3
# c a b
# 1 2 3

lambda函数

函数概念:可以在一行定义一个匿名函数,例如写一个相加的函数

y=lambda a,b:a+b
y(1,2)
print(y)#此处会输出一个指向该对象的引用<function <lambda> at 0x000001E872AC6310>
print(y(1,2))

其基本形式为:变量=lambda[形参]:表达式

特点

1.其函数无返回值,表达式本身就是返回值

2.lambda函数可以接受多个函数,但是只能有一个返回值

3.lambda函数拥有自己的命名空间:不能访问自己参数列表外或全局命名空间里的参数,只能完成非常简单的功能

直接在lambda表达式后面传递实参

result=(lambda x,y:x if x>y else y )(6,5)
print(result)
# 6

注意:lambda函数并不会提高程序的运行效率,只能使代码更简洁

如果可以使用for_in_if来完成,坚决不用lambda

不能包括循环 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值