python函数1_参数,返回值和嵌套

函数

将重复的代码,封装到函数,只要使用直接找函数
函数可以增强代码的模块化和提高代码的重复利用率

函数的定义和调用

格式

def 函数名([参数,参数...]):
    函数体

定义函数

import random

def generate_random():
    for i in range(10):
        ran = random.randint(1,20)
        print(ran,end=',')

调用函数

generate_random()

输出

3,13,6,3,11,16,9,1,10,19,

参数

普通参数

指定随机数的数量

import random

def generate_random(n1):
    for i in  range(n1):
        ran = random.randint(1,20)
        print(ran,end=',')

generate_random(6)

函数中的n1叫做形参,形式上参数,占位
调用时的6叫做实参,实际的参数,具体的值

传入三个数,求和

def sums(n1,n2,n3):
    print(n1+n2+n3)

sums(1,2,4)

定义一个登录函数

参数是username,password
函数体:
判断参数传过来的username,password是否正确,
如果正确则登录成功,否则打印登录失败

def login(username,password):
    # 相当于数据库注册的用户名和密码
    uname = 'admin1'
    pword = '112233'

    for i in range(2):
        if username == uname and password == pword:
            print('登录成功')
            break
        else:
            print('登录失败')
            username = input('输入用户名: ')
            password = input('输入密码: ')
    else:
        print('账户锁定')

# 调用
username = input('输入用户名: ')
password = input('输入密码: ')
login(username,password)
输入用户名: admin
输入密码: 112233
登录失败
输入用户名: admin
输入密码: 112233
登录失败
输入用户名: admin
输入密码: 112233
账户锁定

找出列表的最大值

def maxs(iterable):
    max = iterable[0]
    for i in iterable:
        if i > max:
            max = i
    print('最大值是: ',max)

list1 = [4,1,4,3,8,9]
maxs(list1)
tuple1 = (1,2,3,5,3,2,5)
maxs(tuple1)
最大值是:  9
最大值是:  5

列表排序

isinstance()
判断是不是什么类型
isinstance(变量,类型关键字)

def sort1(iterable):
    if isinstance(iterable,list):
        for i in range(len(iterable)-1):
            for j in range(len(iterable)-1-i):
                if iterable[j] > iterable[j+1]:
                    iterable[j],iterable[j+1] = iterable[j+1],iterable[j]
        print(iterable)
    else:
        print('请使用列表')
list1 = [11,1,2,5,8,7,5,8]
sort1(list1)
[1, 2, 5, 5, 7, 8, 8, 11]

默认值+关键字

def add(a,b=10,c=20):
    print(a,b,c)

add(1)
add(1,2)
add(1,c=2)
1 10 20
1 2 20
1 10 2

可变参数

单个*号

函数调用时,实参的个数可以没有,也可以多个

单独使用
def add(*args):
    sum = 0
    if len(args) > 0:
        for i in args:
            sum += i
        print('累加和是:',sum)
    else:
        print('没有元素可计算')

add()
add(1)
add(1,2,3,4)
没有元素可计算
累加和是: 1
累加和是: 10
和普通参数使用

当传参数量少于两个时,会报错

def add(name,age,*args):
    sum = 0
    if len(args) > 0:
        for i in args:
            sum += i
        print(name,'累加和是:',sum)
    else:
        print('没有元素可计算')

add('tom',1)
add('tom',1,2)
add('tom',1,2,3,4)
没有元素可计算
tom 累加和是: 2
tom 累加和是: 9
列表
def funcs(name, *args):
    if len(args) > 0:
        for i in args:
            print('{}学习了{}'.format(name,i))
    else:
        print('{}没有学过数据库知识'.format(name))
lists = ['oracle','mysql','redis','mongodb']
funcs('tom',lists)
tom学习了['oracle', 'mysql', 'redis', 'mongodb']

发现将列表作为了一个整体,这显然不是我们想要的结果

funcs('tom',*lists)
tom学习了oracle
tom学习了mysql
tom学习了redis
tom学习了mongodb

在调用时,*会将lists拆包为oracle等单个元素
*args参数接收时会将接收的元素,进行装包,放到一个元组中

两个*号

def func(**kwargs):
    print(kwargs)

func()
func(a=1,b=2,c=3)
{}
{'a': 1, 'b': 2, 'c': 3}

当使用两个星时,函数默认会使用字典来存储传的值
所以调用时,传的值需要成对出现key=value

字典
def func(**kwargs):
    print(kwargs)

dict1 = {'001':'python','002':'java','003':'c','004':'go'}

func(**dict1)
{'001': 'python', '002': 'java', '003': 'c', '004': 'go'}

当在字典前面加两个星时,
会对字典进行拆包,拆包为:'001':'python','002':'java'...
函数接收时,形参kwargs前面有两个星号,会准备字典,进行装包

遍历字典

def p_boy(name,**persons):
    print('{}喜欢的小鲜肉是: '.format(name))
    if isinstance(persons,dict):
        for names,age in persons.values():
            print('{}的年龄是{}'.format(names,age))

dict1 = {'01':('蔡徐坤',21),'02':('王源',20),'03':('易烊千玺',19)}
p_boy('tom',**dict1)
tom喜欢的小鲜肉是: 
蔡徐坤的年龄是21
王源的年龄是20
易烊千玺的年龄是19

返回值

函数中通过return关键字来返回信息

当要使用return返回的内容时,必须使用变量去承接

def add(a,b):
    result = a + b
    print(result)
    return a * b
x = add(2,4)
print(x)
6
8

当return后面跟多个值

底层会会把这些值先放到元组中,赋值时,作为一个整体给x赋值

def add(a,b):
    result = a + b
    print(result)
    return a * b,a - b,a + b


x = add(2,4)
print(x)
6
(8, -2, 6)

当返回值为多个时,也可以使用多个变量来承接,会分别赋值

def add(a,b):
    result = a + b
    print(result)
    return a * b,a - b,a + b


x,y,z = add(2,4)
print(x,y,z)
6
8 -2 6

嵌套函数

def a():
    print('AAA')

def b():
    a()
    print('BBB')

def c():
    b()
    print('CCC')

c()
AAA
BBB
CCC

登录验证函数

import random

定义验证码函数

def generate_checkcode(n):
    s = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
    code = ''
    for i in range(n):
        ran = random.randint(0,len(s)-1)
        code += s[ran]
    return code

定义登录函数

def login():
    username = input('输入用户名: ')
    password = input('输入密码: ')
    # 得到验证码
    code = generate_checkcode(5)
    print('验证码是:',code)
    code1 = input('请输入验证码: ')
    # 验证
    if code.lower() == code1.lower():
        if username == 'lijiaqi' and password == '123456':
            print('用户登录成功')
        else:
            print('用户名或者密码有误')
    else:
        print('验证码有误')

调用

login()
输入用户名: lijiaqi
输入密码: 12345
验证码是: uWK8V
请输入验证码: uwk8v
用户名或者密码有误
输入用户名: lijiaqi
输入密码: 123456
验证码是: 9MlCb
请输入验证码: 9mlcb
用户登录成功

你可能感兴趣的:(python函数1_参数,返回值和嵌套)