目录

一、函数的定义与调用

1、定义 :具有独立功能的代码块组成的一个模块

2、函数调用

3、函数的文档说明:       在定义函数时,添加的字符串信息;当用help查看函数时,才会显示出文档说明

二、函数的定义与调用

1、函数参数

 2、返回值

三、四种函数类型

函数注意点

四、函数的嵌套使用

d6作业

字符串与形参一起打印用+连接

六、局部变量与全局变量

 七、函数的多个返回值

八、函数的参数

九、 递归函数和匿名函数

d7作业


一、函数的定义与调用

1、定义 :具有独立功能的代码块组成的一个模块

def 函数名():
代码:
     def test():
            a = 4  
            b = 8
            print("%d"%(a+b))

2、函数调用

 函数名()
    def sum():
            a = 4
            b = 8
            print("%d"%(a+b))
    sum()    

3、函数的文档说明: 
      在定义函数时,添加的字符串信息;当用help查看函数时,才会显示出文档说明

  def test():
    "函数功能:用来实现2个数据求和"
    a = 4;
    b = 8;
    printf("%d"%(a+b))

查看:help(函数名) 例子:help(test)

def add():
    '函数功能:两个数求和'
    a = 10
    b = 20
    print('求和:%s' %(a+b))
add()
print(help(add))

'''
求和:30
Help on function add in module __main__:

add()
    函数功能:两个数求和

None

进程已结束,退出代码 0

二、函数的定义与调用

1、函数参数

定义函数时在小括号内添加多个参数名字
    调用函数时在小括号内加入要传递的参数的值

定义格式:
       def 函数名(参数名1,参数名2.....) :
    函数执行代码
    函数执行代码
        .........

调用格式:函数名(值1,值2......)

def add2num(num1,num2):
    a = num1
    b = num2
    c = a + b
    print(c)
add2num(10,23)
add2num(129,123)

'''
33
252

进程已结束,退出代码 0

 2、返回值

函数完成所有操作后,可以返回结果给调用者 
在函数中把结果返回给调用者,需要在函数中使用return

格式:  def 函数名(参数名1,参数名2.....) :
           函数执行代码
           函数执行代码
           .........
           return 结果值    

调用:存放返回值变量 = 函数名(参数值1,值2........)

返回值的实例

#定义函数
 def add2num(a, b): 
    return a+b 

#调用函数,顺便保存函数的返回值 
result = add2num(100,98)

 #因为result已经保存了add2num的返回值,所以接下来就可以使用了
print(result)

def add2num(a,b):
    return a+b
result = add2num(100,98)
print(result)

'''

198

进程已结束,退出代码 0

三、四种函数类型

函数类型

无参数,无返回值
    此类函数,不能接收参数,也没有返回值,一般情况下,打印提示灯类似的功能,使用这类的函数

无参数,有返回值
    此类函数,不能接收参数,但是可以返回某个数据,一般情况下,像采集数据,用此类函数

有参数,无返回值
    此类函数,能接收参数,但不可以返回数据,一般情况下,对某些变量设置数据而不需结果时,用此类函数.

有参数,有返回值
    此类函数,不仅能接收参数,还可以返回某个数据,一般情况下,像数据处理并需要结果的应用,用此类函数.

def domo1():
    print("无参数无返回值的函数")
domo1()

def domo2():
    return '无参数有返回值的函数'
a = domo2()
print(a)

def domo3(num1,num2):
    print('%s' %(num1+num2))
domo3('有参数','无返回值的函数')

def domo4(num3,num4):
    num = num3+num4
    return num
b = domo4('有参数','有返回值的函数')
print(b)

'''

无参数无返回值的函数
无参数有返回值的函数
有参数无返回值的函数
有参数有返回值的函数

进程已结束,退出代码 0

函数注意点

    在调用函数时,如果需要把一些数据一起传递过去,被调用函数就需要用参数来接收
    参数列表中变量的个数根据实际传递的数据的多少来确定

四、函数的嵌套使用

函数嵌套

    一个函数里面又调用了另外一个函数,这就是所谓的函数嵌套调用 

def 函数A(参数,........):
        执行语句
        ......

        def 函数B(参数,......):
            执行语句
            函数A(参数值1,........) 
            ......

(1)写一个函数打印一条横线
(2)打印自定义行数的横线

def hengxian():
    print('-'*20)
hengxian()
print('')
def hengxian1(num):
    i = 0
    while i < num:
        print('-'*10)
        i +=1
hengxian1(5)

'''

--------------------

----------
----------
----------
----------
----------

进程已结束,退出代码 0

(1)写一个函数求三个数的和
(2)写一个函数求三个数的平均值

def qiuhe(a,b,c):
    return (a+b+c)
print(qiuhe(1,2,3))

def pingjun(a,b,c):
    rest = qiuhe(a,b,c)/3
    return rest
print(pingjun(6,9,6))

'''

6
7.0

进程已结束,退出代码 0

d6作业

1、 编写一个名为 display_message() 的函数,它打印一个句子,指出你在本章学的是什么。调用这个函数,确认显示的消息正确无误。
2、 编写一个名为 favorite_book() 的函数,其中包含一个名为 title 的形参。这个函数打印一条消息,如 One of my favorite books is Alice in Wonderland 。调用这个函数,并将一本图书的名称作为实参传递给它。
3、 编写一个名为 make_shirt() 的函数,它接受一个尺码以及要印到 T 恤上的字样。这个函数应打印一个句子,概要地说明 T 恤的尺码和字样。使用位置实参调用这个函数来制作一件 T 恤;再使用关键字实参来调用这个函数。
4、 修改函数 make_shirt() ,使其在默认情况下制作一件印有字样 “I love Python” 的大号 T 恤。调用这个函数来制作如下 T 恤:一件印有默认字样的大号 T恤、一件印有默认字样的中号 T 恤和一件印有其他字样的 T 恤(尺码无关紧要)。
5、 编写一个名为 describe_city() 的函数,它接受一座城市的名字以及该城市所属的国家。这个函数应打印一个简单的句子,如 Reykjavik is in Iceland 。给用于存储国家的形参指定默认值。为三座不同的城市调用这个函数,且其中至少有一座城市不属于默认国家。
6、 编写一个名为 city_country() 的函数,它接受城市的名称及其所属的国家。这个函数应返回一个格式类似于这样的字符串:"Santiago, Chile" 。至少使用三个城市 - 国家对调用这个函数,并打印它返回的值。

字符串与形参一起打印用+连接

def display_message():
    print('函数')
display_message()

def favorite_book(title):
    print('One of my favorite books is ',end='')
    print(title)
favorite_book('龙族')

def make_shirt(a,b):
    print('size is '+ a + ',picture is '+ b )
make_shirt('L','goodboy')

def make_shirt(a,b='I love Python'):
    print('size is '+ a + ',picture is '+ b )
make_shirt('L','goodboy')
make_shirt('L')
make_shirt('M')

def describe_city(name,country='中国'):
    print(name +' is belong ' + country)
describe_city('上海')
describe_city('纽约','美国')
describe_city('李梦','我')

def city_country(name,country='中国'):
    return name,country
print(city_country('上海'))
print(city_country('纽约','美国'))
print(city_country('台湾'))


'''

函数

One of my favorite books is 龙族

size is L,picture is goodboy

size is L,picture is goodboy
size is L,picture is I love Python
size is M,picture is I love Python

上海 is belong 中国
纽约 is belong 美国
李梦 is belong 我

('上海', '中国')
('纽约', '美国')
('台湾', '中国')

进程已结束,退出代码 0

六、局部变量与全局变量

局部变量

    局部变量,就是在函数内部定义的变量

    不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响

    作用 : 临时保存数据需要在函数中定义变量来进行存储,

python 函数课后习题_类函数

 全局变量 
    一个变量,既能在一个函数中使用,也能在其他的函数中使用

python 函数课后习题_python_02

 如何修改全局变量:global  a

python 函数课后习题_字符串_03

 七、函数的多个返回值

python中可以返回多个值:

格式:def 函数名(参数名1,参数名2.....) :
               函数执行代码
               函数执行代码
               .........
               return 返回值1,返回值2,......

调用:
依次存返回值变量1,变量2,.... = 函数名(参数值1,........)
 

def num(a,b):
    c = a+b
    d = a-b
    return c,d
a,b = num(4,2)
print(a,b)

'''

6 2

进程已结束,退出代码 0

八、函数的参数

缺省参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。
格式:def 函数名(参数名1,参数2=默认值,....参数n=默认值):  
调用时:函数名(值1)
    注意:带有默认值的参数一定要位于参数列表的最后面。
        def usrinfo(name,age=25):
                print("Name = %s"%name)
                print("age = %d"%age)

       usrinfo('zhangsan')

       Name = zhangsan
       age = 25

不定长参数
格式:def 函数名(参数名1,*args,**kwarg):  
调用时:函数名(值1)
注意:加*表示args可以存放所有未命名的变量参数,args为元组
          加**表示kwarg可以存放命名参数,即形如key=value的参数, kwargs为字典。

def num(a,b,*args,**kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)
num(1,1,2,3,4,4,name = 'haha',age = 18)

'''

1
1
(2, 3, 4, 4)
{'name': 'haha', 'age': 18}

进程已结束,退出代码 0

引用传参
Python中函数参数是引用传递(注意不是值传递)。对于不可变类型,因变量不能修改,所以运算不会影响到变量自身;而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量。
例子:若将a +=a  修改成 a = a + a ,再次观察效果,讨论原因

def num(a):
    a += a
    return a

a = num(10)#10是不可变类型
print(a)

list = [1,2]
num(list)#list是可变类型
print(list)
print(list+list)

'''

20
[1, 2, 1, 2]
[1, 2, 1, 2, 1, 2, 1, 2]

进程已结束,退出代码 0

九、 递归函数和匿名函数

递归函数
如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。
例子:我们来计算阶乘 n! = 1 * 2 * 3 * ... * n

#循环实现
def cal_num(num):
    i = 1
    rest = 1
    while i <= num:
        rest *= i
        i += 1
    return rest
print(cal_num(3))

#递归实现
def cal(num):
    if num >= 1:
        rest = num * cal(num-1)
    else:
        rest = 1
    return rest
print(cal(3))

'''

6
6

进程已结束,退出代码 0

匿名函数
用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
lambda函数的语法只包含一个语句,如下:
        lambda [arg1 [,arg2,.....argn]]:expression
例子:求两个数据的和  
>>> sum = lambda a,b:a+b
>>> sum(45,23)
68

c = lambda a,b :a+b
print(c(1,2))

'''

3

进程已结束,退出代码 0

d7作业

1、 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
2、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
3、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者
4、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
5、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。PS:字典中的value只能是字符串或列表

python 函数课后习题_python_04

 

def a(num):
    if len(num) > 5:
        print('yes')
    else:
        print('not')
a('asda')
print('')
def b(num):
    if len(num) == 0:
         return True
    else:
        for i in num:
            if i == ' ' or i == None:
                return True
        return False
print(b('  a'))
print('')
def c(num):
    if len(num) > 2:
        num = [num[0],num[1]]
        return num
    else:
        return num
c = c([1,3,4])
print(c)
print('')
def d(num):
    ret = []
    for i in range(len(num)):#range(3)即创建列表[0,1,2]
        if (i % 2) == 1:
            ret.append(num[i])
        else:
            pass
    return ret
print(d([0,1,2,3,4]))
print('')
def e(dict):
    ret = {}
    for key,value in dict.items():#注意key,value位置,不能放反
        if len(value) > 2:
            ret[key] = value[0:2]
        else:
            ret[key] = value
    return ret
t = {1:'清风明月',2:[1,2,3,4],3:'明月'}
print(e(t))

'''

not

True

[1, 3]

[1, 3]

{1: '清风', 2: [1, 2], 3: '明月'}

进程已结束,退出代码 0