python初始函数__009

1、定义一个函数:简单规则

(1)函数代码块以def关键词开头,后接函数标识符名称和圆括号();

(2)任何传入参数和自变量必须放在圆括号中间,圆括号之间可以定义参数;

(3)函数的第一行语句可选择性地使用文档字符串-用于存放函数说明;

(4)函数内容以冒号起始,并且缩进;

(5)return表达式结束函数,选择性地返回一个值给调用方,不带表达式的return返回None

2、函数能提高应用的模块性,和代码重复利用率。

3、python提供了很多内建函数,但你自己创建的函数,叫用户自定义函数。

4、格式:

def  函数名(参数列表):

        函数体

5、返回值:返回值有3种情况

(1)没有返回值:返回None

                      # 不写return

                      #只写return:结束一个函数的继续,不执行break下的代码(注:break是结束for循环,函数内:循环之外的仍继续执行)

                      # return None 不常用

(2)返回一个值

                     #可以返回任何一个数据类型

                     #只要返回就可以接收到

                     # 如果在一个函数中有多个return,只执行第一个

(3)返回多个值

                     # 用多个变量接收:有多少个返回值就用多少个变量接收

def func():
    a = 1
    b = 3
    c = 4
    return a,b,c
k1,k2,k3 = func()
print(k1,k2,k3)

                    # 用一个变量接收:得到一个元组

def func():
    a = 1
    b = 3
    c = 4
    return a,b,c
k1 = func()
print(k1)  # (1, 3, 4)

6、参数:形参和实参

def my_len(s):  # 接收参数,是形式参数简称形参
    i = 0
    for k in s:
        i += 1
    return i
ret = my_len('jianghe')     # 传递参数:传参,实际参数:实参
print(ret)

7、函数的参数:

(1)没有参数:定义函数和调用函数时括号中不写内容

(2)有一个参数

(3)多个参数:位置参数

例子:

def my_sum(a,b):
    print(a,b)
    res = a+b
    return res
ret = my_sum(2,3)
print(ret)

8、站在形参的角度上:

#位置参数:必须传,且有几个参数就传几个值

# 默认参数:可以不传,如果不传就用默认参数,如果用了就用传入的参数

9、站在实参的角度上:

# 按照位置传参

# 按照关键字传参

# 混着可以用:但是,必须先按照位置传参,再按照关键字传参(不能给同一个变量传多个值)

例子:

def func(name,sex='男'):
    return '%s:%s'%(name,sex)
f = func('江河','男')
print(f)

10、只有调用函数的时候:

#按照位置传参:直接写参数的值

# 按照关键字:关键字=值

11、定义函数的时候:

# 位置参数:直接定义参数

#默认参数:关键字参数:参数名=‘默认的值’

# 动态参数:可以接收任意多个参数,即不确定有多少个参数

              # 参数名之前加*,习惯用参数名args,

              # 参数名之前加**,习惯用参数名kwargs,

# 顺序:位置参数,*args,默认参数,**kwargs

(注意:*args可以看成是多个变量组成的tuple;**kwargs可以看成是一个字典)

12、

(1)动态参数有两种:可以接受任意个参数

# *args :接收的是按照位置传参的值,组织成一个元组

# **kwargs:接收的是按照关键字传参的值,组织成一个字典

# *args必须在**kwargs之前

#  *的作用:函数接受实参时,按顺序分配给函数形参,如果遇到带*的形参,那么就把还未分配出去的实参以元组形式打包(pack),分配给带*的形参

简单来说就是:
  打包(pack)*args是把多个位置参数打包成元组**kwargs是把多个关键字参数打包成字典
  拆分(unpack)*args是把打包了的参数拆成单个的,依次赋值给函数的形参,**kwargs是把字典的键值拆成单个的,依次赋值给函数的形参。

例子:

def func(*args,**kwargs):
    return args,kwargs
func(1,2,3,4,5,a=1,b='js')
print(func(1,2,3,4,5,a=1,b='js'))
# ((1, 2, 3, 4, 5), {'a': 1, 'b': 'js'})

(2)动态传参的另一种形式*******************************

例子:

def func(*args):  # 站在形参的角度上,给变量加*,就是组合所有传来的值为元组
    print(args)
func(1,2,3,4,5)
l = [1,2,3,4,5]
print(*l)
func(*l) # 站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散


# 同上
def func(**kwargs):
    return kwargs
print(func(a=1,b=2,c=3))
k = {'a':1,'b':2,'c':3}
print(func(**k))

函数的注释:

def  func():
      """

           (1)这个函数实现什么功能

           (2)参数:含义

           (3):return:返回值,是字符串或者列表的长度

     """

13、总结:

定义函数的规则:

(1)定义:def关键字开头,空格后函数名称和圆括号和冒号:、函数体

(2)参数:圆括号用例接收参数,若传入多个参数,参数之间用英文逗号隔开。

                    参数可以定义多个,也可以不定义

                    参数有很多种,如果涉及到参数的定义,应遵循顺序:

                         位置参数、*args、默认参数、**kwargs

                    如果上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序

(3)函数的注释:函数体的第一行加函数的注释

(4)函数体:函数内容以冒号起始,并且缩进

(5)返回值:return  [表达式]    结束函数,如果不带表达式的return返回None

格式:

def  函数名(位置参数,*args,默认参数,**kwargs):
    "注释"
    函数体
    return 返回值

    

调用函数的规则:

(1)函数名()       # 函数名+圆括号就是函数的调用

(2)参数:

# 圆括号是用来接收参数的

# 若传入多个参数: 应该按照先位置参数、关键字参数

(3)  返回值

# 如果函数有返回值,还应该定义“变量”接收返回值

# 如果返回值有多个,也可以用多个变量来接收,变量数应和返回值数目一致

有三种情况:

一、无返回值:

函数名()

二、有返回值:

变量名=函数名()

三、多个变量接收多个返回值

变量1,变量2,变量3... = 函数名()

练习题:

#   1、假设无法用len()方法查看字符串等类型的长度
s = 'jsdfljd'
# print(len(s))

def len_():
    j = 0
    for i in s:
        j += 1
    return j
print(len_())


# 2、函数return后面代码不再执行
def func():
    """
    (1)这个函数是什么功能
    (2)参数1:含义
    (3)参数2:含义
    :return:返回值是字符串或列表长度或其他
    """
    l = ['金老板','二哥']
    for i in l:
        print(i)
        if i == '金老板':
            return None
    print('='*10)
ret = func()
print(ret)  # 函数中遇到return,将介绍苏函数,不再执行return后面的代码(函数中)


# 3、1-2+3-4+5.......+99 结果
def func():
    sum = 0
    for i in range(1,100):
        if i%2 == 0:
            sum -= i
        else:
            sum += i
    return sum
print(func())


# 4、使用range打印100,99,98,....1,0
for i in range(100,-1,-1):
    print(i)




'''
5、实现一个整数加法计算器:(6分)            
如:content = input(‘请输入内容:’)  # 如用户输入:5+8+7....(最少输入两个数相加),
然后进行分割再进行计算,将最后的计算结果添加到此字典中(替换None):
dic={‘最终计算结果’:None}。

'''
'''
def num_sum():
    """
    实现一个加法计算的功能
    :return: 返回数字相加的结果或者输入错误提示
    """
    content = input('请输入:')
    sum = 0
    dic={'最终计算结果':None}
    for i in content:
        if i.isdigit():
            sum += int(i)
        else:
            return "请输入数字"
    dic['最终计算结果'] = sum
    return dic
while 1:
    print(num_sum())
'''

# 方法二:通过使用split()方法分割输入的数字和加号
while 1:
    dic = {'最终计算结果': None}
    content = input('请输入:')
    content_list = content.split('+')
    sum = 0
    j = 0
    for i in content_list:
        if i.isdigit():
            sum += int(i)
            dic['最终计算结果'] = sum
            j += 1
            if j == len(content_list):
                print(dic)
        else:
            print('请输入数字')

函数思维导图:

陷阱例子:默认参数的陷阱

如果默认参数的值是一个可变数据类型,那么每一次调用的时候如果不传值就公用这个数据类型资源

例子:默认参数使列表可变数据类型

def func(l= []):
    l.append(l)
    print(l)

func()
func()
func()
# [[...]]
# [[...], [...]]
# [[...], [...], [...]]


# 例子2
def func(dic1 = {}):
    dic1['k'] = 'v'
    print(dic1)
func()
func()
func() # 因为键一样,所有覆盖了之前的键值对


# 例子3
def func(k,dic1={}):
    dic1[k] = 'v'
    print(dic1)
func(1)  # {1: 'v'}
func(2)  # {1: 'v', 2: 'v'}
func(3)  # {1: 'v', 2: 'v', 3: 'v'}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值