Python入门-函数

1.函数是啥

"""
函数是封装一段代码,用于方便重复调用该功能
每一个函数都是一个功能
"""
#假如需要求圆的面积

r1 = 2
s1 = 3.14 * r1 ** 2

r2 = 4
s1 = 3.14 * r2 ** 2
是否有更简单的求圆的面积的方法??--函数
def s(r):
    area = 3.14 * r**2
    print(area)
s(2)
s(4)

 

2.函数格式定义

def func_name(args):  # def关键字+函数名+冒号
    """
    写函数说明         #写函数说明,是为了方便日后维护,以及方便使用
    """
    body             # 函数体内容,和分支结构一样,强制缩进
    return XXX       # 函数最后返回结果,return会结束函数,后面的代码都不会执行

3.使用函数

def info():
    """
    这是一个函数说明
    """
    print("hello word")
    return True
    print("函数return后面的代码,不会执行")
info()  # 使用函数名字+括号,就可以调用函数
"""
hello word
True
"""

4.函数参数

"""
1.函数是代码的封装,可以实现某个功能,那么在代码中的参数可以提取出来,作为参数传递给函数,这样更有利于函数的使用。

2.python中的函数参数有:关键字参数、默认参数、非关键字可变长参数(元组)、关键字可变长参数(字典)

3.参数传递有两种方式:
    按照先后位置传递参数【简单易读】
    赋值方式传递参数【传递方式灵活,准确】

4.如果函数指定参数,调用函数必须传递参数,不传值会直接报错,或者函数功能不可用
"""

关键字参数

# 调用函数时,根据参数的个数和位置给参数传值# 前面学到的,字符串.format()方式传值,就基本实现了参数传递功能。

def hello(name, age):
    print("我叫{},我今年{}岁".format(name, age))
hello("tom",33)
hello(age=55, name="jack")
hello("alise", 44)
"""
我叫tom,我今年33岁
我叫jack,我今年55岁
我叫alise,我今年44岁
"""

 默认参数

# 默认参数,指的是,在函数开始的时候,默认给定参数,防止使用者忘记给参数
# 当使用者不给参数时,默认参数生效
# 当使用者给定参数时,给定参数覆盖默认参数

def hello(name="hello", age=99):
    print("我叫{},我今年{}岁".format(name, age))
hello("tom",33)
hello(name="jack",age=66)
hello()
"""
我叫tom,我今年33岁
我叫jack,我今年66岁
我叫hello,我今年99岁
"""

 非关键字可变长参数(元组)

# 非关键字:直接给参数就行,不需要赋值传入
#可变长:可传入多个参数
#python会将这些多出来的参数放入一个元组中。例:

def match(cmd, *args):    # 最后一个,带*的参数
    print(type(args),len(args))
    sum = 0
    if cmd == "+":
        for i in args:    # 一般采用for循环获得参数
            sum += i
    elif cmd == "-":
        for i in args:
            sum -= i
    return sum
match("+",1,2,3,4,5,6)   #21

 关键字可变长参数(字典)

# 关键字:格式为关键字参数,name="tom"的赋值形式
# 可变长:可传入多个
#python会将,全部的参数放入一个字典中。需要注意的是,关键字变量参数应该为,函数定义的【最后一个】参数,【带**】。例:

def hello(name, **kwargs):  # 最后一个,带**的参数
    """
    可变参数
    """
    print(name)
    for i in kwargs.items():   # 关键字可变长参数,一般可采用for循环取得
        print(i)
hello("tom",wz = "www.baidu.com",gg = "www.google.com"
"""
tom
('wz', 'www.baidu.com')
('gg', 'www.google.com')
"""

 

 5.实际开发中的参数使用注意

#参数使用推荐================================
 a.在实际开发中,常用必需参数
 b.关键字参数和默认参数在系统函数中使用较多
 c.不定长参数不推荐使用,会让使用者陷入混乱
 d.参数*args,**kwargs中的,args和 kwargs 只是一个标识符,可以是任意的

#传参的注意事项==============================
#1.值传递:实参是不可变的数据类型,如number,string,tuple,bool
def func1(num1):
 print("修改前num1:%d" % (id(num1)))
 num1 = 20
 print("修改后num1:%d" % (id(num1)))

temp = 10
print("temp:%d" % (id(temp)))
func1(temp) #num1 = temp
print(temp)

#2.引用传递:实参是可变的数据类型,如:list,dict,set
def func1(list1):
 print("修改前num1:%d" % (id(list1)))
 list1[0] = 20
 print("修改后num1:%d" % (id(list1)))

temp = [1,2,3]
print("temp:%d" % (id(temp)))
func1(temp)
print(temp)

"""
值传递,如果形参发生改变,实参不受影响
引用传递,如果形参发生改变,实参也会随着被修改
"""

 

6.返回值return

#1.如果一个函数没有返回值,则默认返回None
def show1():
    print("show")
print(show1())

#2.如果一个函数中使用return语句,但是没有任何数据,则默认返回None
#return的作用:用于结束函数,一旦遇到returan语句,后面的语句将没有执行的机会
def show2():
    print("show")
    return
    print("hello")
print(show2())

#3.如果一个函数中使用return语句,并且后面添加了返回值,则结束函数的同时将指定的数据返回【在哪里调用该函数,则返回到哪里】
def show3():
    print("show")
    return "hello"
s3 = show3()   #s3 = "hello"
print(s3)

#4.return 返回值的意义:在函数内部运算的结果,如果想要在函数外部访问,则只能通过返回值的形式进行间接的访问
def show4():
    #局部变量:仅仅能在当前函数中被访问
    num1 = 10
    print("函数内部:",num1)
    return num1

num2 = show4()   #num2 = num1 = 10
#print(num1)  #NameError: name 'num1' is not defined


"""
封装函数的必要条件:
 a.形式参数【如果有未知项参与运算,将未知项设置为参数】
 b.返回值【如果在函数的外部需要访问函数内部的数据,设置返回值】
"""

#5.特殊情况一:return后面可以跟多个值,在函数外面获取得到的结果为一个元组
def show5():
    print("show")
    return 10,"abc",True

s5 = show5()
print(s5)   #(10, 'abc', True)

#6.特殊情况二:函数的多分支中也可以使用return,可以返回不同类型的数据
def show6(num):
    if num > 0:
        return "正数"
    elif num < 0:
        return  -1
    else:
        print("等于0")
print(show6(7))
print(show6(-7))
print(show6(0))

#7.特殊情况三:break和return的作用
#break只是跳出当前的循环,return直接结束函数,不管return处于多少层循环之中
def show71():
    for i in range(4):
        for j in range(3):
            print("%d=%d" % (i,j))
            if j == 1:
                return
show71()
print("*"*20)
def show72():
    for i in range(4):
        for j in range(3):
            print("%d=%d" % (i,j))
            if j == 1:
                break
show72()
"""
0=0
0=1
********************
0=0
0=1
1=0
1=1
2=0
2=1
3=0
3=1            
"""
#注意:在某些情况下,在函数中,可以使用return代替break

 

7.函数的本质

1.变量可以指向函数

#获取函数调用的结果
print(abs(-10))  #10

#获取求绝对值的函数
print(abs)  #<built-in内置/內建 function abs>

x = abs(-18)
print(x)

f = abs
print(f)
print(f(-20))
#结论:函数本身可以赋值给变量,如果一个变量指向一个函数,则可以通过该变量调用指定的函数

 2.函数名是一个变量名

#给函数名重新赋值
print(abs(-36)) 
abs = 10
print(abs(-36))
"""
list,tuple,dict,set不要被使用为变量名

结论:函数名就是一个变量名,只不过该变量指向一个可以实现某种功能的函数,同时也可以给该变量进行重新赋值
注意:如果给函数名重新赋值,则再次调用函数无法使用,注意:定义变量的时候,尽量避开系统函数或者模块的命名
"""

3.函数可以作为参数

def add(x,y,f):
    return f(x,y) + f(x,y)    #test(3,4) + test(3,4)

def test(a,b):
    return  a + b

print(add(3,4,test))  #f = test
#结论:一个函数可以作为另外一个函数的参数使用,传参的时候,只需要传递函数名即可

 

posted @ 2021-08-17 22:26  zwx901323  阅读(52)  评论(0)    收藏  举报