python基础函数

2018-12-13  本文已影响0人  数据工程师从入门到放弃

python课程总结(2)

[TOC]

函数的四种类型

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

全局变量

# 全局变量:在函数外定义的变量叫做全局变量,全局变量可以在不同函数内使用。
# 特点: 全局变量可以在不同函数内共享全局变量的数据

# 全局变量
score = 100

def show():
    # 在这里不是对全局变量进行了修改而是定义了一个局部变量,
    # 只不过局部变量的名字和全局变量的名字相同
    # score = 99

    # 修改全局变量
    global score  # 表示要对全局变量score进行数据的修改
    score = 99

    print("分数:", score)#99

缺省参数

# 缺省参数: 在函数定义的时候参数就有值,那么像这样的参数叫做缺省参数
# 提示: 如果给缺省参数传值就是传入的值,
# 如果不给缺省参数传值那么就使用默认值(缺省值)
# # 如果有必选参数和缺省参数,那么缺省参数要放到必选参数后面

def sum_num(num1, num2=1):
    result = num1 + num2
    return result

传参方式

# 调用函数传参的方式有: 1. 使用位置参数方式参数 2. 使用关键字参数方式传参

def show(name, age):
    print(name, age)
    
# 使用位置参数方式传参必须按照函数参数的顺序去传参
show(20, "赵六")

# 使用关键字方式传参,可以不按照函数参数的顺序传参
show(age=18, name="冯七")

#可以接受先使用位置传参,在使用关键字传参数
show("王三",age=19)

不定长参数

# 函数的不定长参数: 1. 不定长位置参数 2. 不定长关键字参数

# 不定长参数: 调用函数的时候不确定传入多少个参数,可能是0个或者多个参数

# --------------不定长位置参数函数的定义及调用-------------
# 定义一个不定长位置参数(*args)
def sum_num(*args):
    # 提示: args: 会把调用函数传入的位置参数封装到一个元组里面,
    # 如果没有传入参数那么是一个空元组
    print(args, type(args))
    # 计算结果变量
    result = 0
    for value in args:
        result += value
    return result
# # 调用不定长位置参数的函数
value = sum_num(1, 4, 5, 6)
print(value)
# 注意点: *args:表示定义的函数是不定长的位置参数,
# 调用函数的时候只能使用位置参数传值,不能使用关键字
# result = sum_num(a=1, b=2, c=3)
# print(result) 会报错

# --------------不定长关键字参数函数的定义及调用-------------
# 定义不定长关键字参数函数, **kwargs: 表示的就是一个不定长关键字参数
def show_msg(**kwargs):
    # kwargs: 会把函数调用的关键字参数封装到字典里面
    print(kwargs, type(kwargs))

    for key, value in kwargs.items():
        print(key, value)

# 调用的不定长关键字参数的函数
show_msg(a=1, b=2)

# 不能使用位置参数给不定长关键字函数传参
# show_msg(1, 2)

# 定义不定长位置参数函数
def show_msg(*args):
    print(args)
    for value in args:
        print(value)


# 定义不定长位置参数函数
def show(*args):
    # print(args, type(args))
    # show_msg(args)
    # 解决办法: 对元组进行拆包
    show_msg(*args) #拆包
show(1, 2)

====================================================================================

def show_msg(**kwargs):
    print(kwargs)
    for key, value in kwargs.items():
         print(key, value)


# 定义不定长关键字函数
def show(**kwargs):
    # 把关键字参数封装到字典里面
    # print(kwargs)
    #show_msg(a=kwargs)

    # 对字典进行拆包
    show_msg(**kwargs)


show(a=1, b=2)
"""
{'a': 1, 'b': 2}
a 1
b 2
"""

# 下面的定义可以使用缺省参数
def show(name, *args, age=18, **kwargs):
    print(name, age, args, kwargs)

show("张三", '哈哈', '嘻嘻', a=1)
show("张三", '哈哈', '嘻嘻', age=20, a=1)
"""
张三 18 ('哈哈', '嘻嘻') {'a': 1}
张三 20 ('哈哈', '嘻嘻') {'a': 1}
"""

函数的注意事项

# 函数的注意事项: 1. 函数名不能相同, 2.变量名不能和函数名相同

设定必须关键字传参

# 定义必须参数使用关键字传参的函数, 注意点: *后面的参数必须使用关键字方式传参
def show(address, sex,*, name, age):
    print(address, sex)
    print("我叫:%s 年龄:%d" % (name, age))
    
# 使用位置参数传参
#show("刘八女", 38) 报错
# 使用关键字参数传参
#show(name="曹操", age=66) 报错

show("上海", '男', name="刘墉", age=92)

递归函数

import sys

# 递归函数: 在函数里面在调用函数本身就是递归函数
# # 必须要设置结束递归的条件及返回值
# 递归函数的特点: 1. 传递  2. 回归

# 5! = 5 * 4!
# 4! = 4 * 3!
# 3! = 3 * 2!
# 2! = 2 * 1!
# 1! = 1

def calc_num(num):
    # 当计算1的阶乘的时候不需要往下传递需要返回结果
    if num == 1: # 必须要设置结束递归的条件及返回值
        return 1
    else:
        return num * calc_num(num-1)

# 获取默认的递归次数
result = sys.getrecursionlimit()
print(result)

# 设置递归次数
sys.setrecursionlimit(1100)

result = sys.getrecursionlimit()
print(result)



result = calc_num(1000)
print(result)

# 注意点:1. 不能无限递归调用,默认是递归调用的次数1000,一般都是1000次所有

匿名函数

# 匿名函数: 顾名思义就是函数没有名字,使用lambda关键字定义的函数就是匿名函数
# 匿名函数只适合做一下简单的操作,返回值不需要加上return
result = (lambda x, y: x + y)(1, 2)
print(result)
# # 一般使用变量保持匿名函数
func = lambda x, y: x * y
result = func(1, 2)
print(result)

# # 判断是否是偶数
 def is_os(num):
     if num % 2 == 0:
         return True
     else:
         return False

 result = is_os(1)
 print(result)

# 匿名函数的应用场景,简化代码, 还可以使用简单的if判断
new_func = lambda num: True if num % 2 == 0 else False

result = new_func(1)
print(result)
# 对字典列表排序的时候还可以使用匿名函数
my_list = [{"name": "zs", "age": 20}, {"name": "ls", "age": 19}]
# item: 表示列中的每一项字典数据
# item["age"]: 根据字典中age对应的value值排序
# 默认是从小到大进行排序
# my_list.sort(key=lambda item: item["age"], reverse=True)
# print(my_list)

# 匿名函数也是函数

def get_value(item):
    return item["age"]

my_list.sort(key=get_value, reverse=True)
print(my_list)

# 倒着获取字符串中的每个数据
result = my_str[::-1]
print(result)
上一篇下一篇

猜你喜欢

热点阅读