python 【函数】

python 函数

一、什么是函数

python中的len方法不让用了,你怎么办?

 li = [1, 2, 3, 43, 'fdsa', 'alex']
count = 0
for i in li:
    count += 1
print(count)

s1 = 'fdsgdfkjlgdfgrewioj'

count = 0
for i in s1:
    count += 1
print(count)

#代码重复 可读性差

  

   def  函数名(参数1,参数2)

      ''' 函数注释'''

      print('函数体')

      return 返回值

    定义:def关键字开头,空格之后接函数名和圆括号,最后还要加一个冒号。

        def是固定的,不能变。

    函数名:函数名是包含字母,数字,下划线的任意组合,但是不能以数字开头。虽然函数名可以随便取名,但是一般尽量定义成可以表示函数功能的。

    函数名 + () 才能执行这个函数

#模拟len函数
s1 = 'fdsgdfkjlgdfgrewioj'
def my_len():
    count = 0
    for i in s1:
        count += 1
    # print(count) #函数的内部尽量不要是使用print

my_len()  # 函数名+() 执行函数 = 函数的调用者
#但是跟原来的len函数还有不同,因为函数以功能为导向,缺少返回值。

二 、 函数的返回值

1.return的作用:结束一个函数的执行 (类似于循环中的break)

2.首先返回值可以是任意的数据类型。

3.函数可以有返回值:如果有返回值,必须要用变量接收才有效果

   也可以没有返回值:

  没有返回值的时候分三种情况:

    1.当不写return的时候,函数的返回值为None

    2.当只写一个return的时候,函数的返回值为None

    3.return None的时候,函数的返回值为None(几乎不用)

4.return返回一个值(一个变量)

5.return返回多个值(多个变量):多个值之间用逗号隔开,以元组的形式返回。

                接收:可以用一个变量接收,也可以用多个变量接收,返回几个就用几个变量去接收

#    1,遇到return,结束函数。
    def func1():
        print(11)
        print(22)
        return
        print(333)
        print(444)
    func1()
#    2,给函数的调用者(执行者)返回值。
 #       无 return 返回None
 #       return 不写 或者 None 返回None
 #       return 返回单个数.
 #       return 返回多个数,将多个数放在元组中返回。
def my_len():
count = 0
for i in s1:
count += 1
return 666
print(my_len(),type(my_len()))

def my_len():
count = 0
for i in s1:
count += 1
return 666,222,count,'老男孩'
print(my_len(),type(my_len()))

#分别赋值
def my_len():
count = 0
for i in s1:
count += 1
return 666,222,count
ret1,ret2,ret3 = my_len() # (666, 222, 19,)
print(ret1)
print(ret2)
print(ret3)

def my_len():
count = 0
for i in s1:
count += 1
return count
print(my_len())#两步执行,先执行函数,return返回给函数执行者,再print
print(len(s1))

四、函数的传参

#函数的传参
li = [1, 2, 3, 43, 'fdsa', 'alex']
s1 = 'fdsgdfkjlgdfgrewioj'

def my_len(a):  # 函数的定义()放的是形式参数,形参
    count = 0
    for i in a:
        count += 1
    return count
ret = my_len(li)  # 函数的执行() 实际参数,实参
print(ret)
print(len(s1))

 函数传参的两大方向

  1、实参角度(3种)

#    1,位置参数。 必须一一对应,按顺序
def func1(x,y):
    print(x,y)
func1(1, 2)
 #   2,关键字参数。必须一一对应,不分顺序。
def func1(x,y,z):
    print(x,y,z)
func1(y=2,x=1,z=5,)

def max(a,b):
    if a > b:
        return a
    else:
        return b
print(max(100,102))

#三元表达式 def max(a,b):return a if a > b else b print(max(100,102))
# 3,混合参数。一一对应 且 关键字参数必须在位置参数后面。 def func2(argv1,argv2,argv3): print(argv1) print(argv2) print(argv3) func2(1,2,argv3=4)

  2、形参角度(3种)

 #  1,位置参数。 必须一一对应,按顺序
def func1(x,y):
    print(x,y)
func1(1,2)

# 2,默认参数。 必须在位置参数后面。
#将变化比较小的值设置成默认参数(比如一个班的男生多,女生就几个,就可以设置个默认值参数)
#定义:默认参数可以不传,不传的时候用的就是默认值,如果传会覆盖默认值。默认的值是在定义函数的时候就已经确定了的
def register(name,sex='男'):
    with open('register',encoding='utf-8',mode='a') as f1:
        f1.write('{} {}\n'.format(name,sex))

while True:
    username = input('请输入姓名:/q 或者 Q 退出')
    if username.upper() == 'Q':break
    if 'a' in username:
        sex = input('请输入性别:')
        register(username,sex)
    else:
        register(username)

#动态参数 (*args,**kwargs 万能参数)
    
def func2(*args,**kwargs):
    print(args)  # 元组(所有位置参数)
    print(kwargs)
func2(1,2,3,4,5,6,7,11,'alex','老男孩',a='ww',b='qq',c='222')
位置参数,*args,默认参数
def func3(a,b,*args,sex='男'):
    print(a)
    print(b)
    print(sex)
    print(args)
func3(1,2,'老男孩','alex','wusir',sex='女')
位置参数,*args,默认参数,**kwargs
def func3(a,b,*args,sex='男',**kwargs):
    print(a)
    print(b)
    print(sex)
    print(args)
    print(kwargs)
func3(1,2,'老男孩','alex','wusir',name='alex',age=46)
def func1(*args,**kwargs):  # 函数的定义 * 聚合。
    print(args)
    print(kwargs)
l1 = [1,2,3,4]
l11 = (1,2,3,4)
l2 = ['alex','wusir',4]
func1(*l1,*l2,*l11)  # 函数的执行:* 打散功能。
func1(1,2,3,4,'alex','wusir',4,1,2,3,4)  # 函数的执行:* 打散功能。
dic1 = {'name1':'alex'}
dic2 = {'name2':'laonanhai'}
func1(**dic1,**dic2)

  














posted @ 2018-04-20 19:02  大程为重  阅读(152)  评论(0)    收藏  举报