函数详解

##函数
#简单的函数获取身份证日期:
# def Id(ID):
#     '''
#     :param ID: ID为函数的参数
#     :return: 是返回值,返回了运算结果(如果不加入return语句,他默认的返回结果是None,就是说它执行的是return None
#             返回时是以元组的方式返回
#     :def Id(ID,NAME):如果我们只是定义了一个参数而不使用默认值(NAME=FALSE),就算我们运行的时候没有使用该参数来进行运算,程序也会报错
#     '''
#     ido = ID[6:14]
#     print(ido)
#     return ido
# Id("440882199508125471")
# 练习:
#
# # 根据输入的手机号码返回运营商名称。
mobile = [134,135 ,136,137,138,139,147,150,151,152,157,158,159,178,182,183,184,187,188]
unicom = [130,131,132,145,155,156,171,175,176,185,186]
telecom = [133,149,153,173,177,180,181,189,199]

def runo():
    Input = input("请输入电话号码>>:")
    '''
    :如果需要对字符串处理的话,就先不要转为整数
    :在函数内(也就是局部变量)可以取到全局变量,但不能更改全局变量
    '''
    Inp = int(Input[:3])
    if Inp in mobile:
        return "中国移动"
    elif Inp in unicom:
        return "中国联通"
    elif Inp in telecom:
        return "中国电信"
    else:
        return "号码错误!!"
print(runo())
def ClassName(list_name,*Name,**NAME):
    '''
    :param list_name: 列表名称
    :param args: 多个值以元组的形式传入
    :param **NAME 多个值以字典的形式传入
    :return:
    :if Name:判断Name不能为空
    :因为星号“*”可以解析可迭代序列。“**”也可以类似使用
    '''
    if Name:
        for i in Name:
            list_name.append(i)
        return list_name
list_name = []
CN = ClassName(list_name,"溜溜","王五","李四","张三","name":"Cairo","age":18)
print(CN)

# 例如,我们通过一组用户信息,返回一个用户描述的字符串。
# 代码如下:
def User(name,age,height,sex = ""):#定义函数并设定参数
    info = '姓名-%s 年龄-%s 身高-%s'%(name,age,height)
    return info
user_info = {'name':'Cairo','age':'20','height':"120"}
print(User(**user_info))
# 单星号“*”可以解析可迭代序列的作用不仅限在参数处理中。
# 举个小例子,让两个元组混合为集合。
# 代码:
# s1 = {(1, 2, 3), (3, 4, 5)}
# s2 = {*(1, 2, 3), *(3, 4, 5)}
# print(s1)
# print(s2)
# 练习
# 从一组数据中的数字类型抽取出全部偶数

def Number_two(*nunber2):
    '''
    :param nunber2: 传入一组元组数字
    :return: 返回值
    :if not Number_t % 2:判断条件,偶数取余为假时(0为假),not是非值,非假即真
    :for 遍历循环取到外面传进来的值:
    '''
    create_list = []
    for Number_t in nunber2:
        if not Number_t % 2:
            create_list.append(Number_t)
    return create_list
create_lis = (1,2,5,6,8,44,55,6,99,58,78)
j_list = Number_two(*create_lis)
print(j_list)
# # 示例
x = 0 #全局变量
def out():
    '''
    :return: 可以返回内嵌函数(也就称为闭包)。
    返回内嵌函数时,如果函数名称后面没有加上'()',调用外层函数时不会立即执行返回函数,需要在调用外层函数后,添加()来执行
    :总结return x,inside:这里是return x 是给外部函数返回第一个值,return inside 是执行外部函数以后,返回的第二个值来调用内部函数
    :也就是我给我当前这个函数返回一个值并且调用内部函数,但内部函数并不会立即执行,需要在调用这个函数的后面加上()才会执行

    :作用域:这一示例中的三个变量x,并不是同一个变量,只是名称一样,三个的作用域都是不一样的
    '''
    x = 1 #局部变量 相对来说是以外面的x = 0 这个x来说是局部变量。如果对 inside函数里面的x来说是外部变量,也是相当于全局变量了
    def inside():
        '''
        :return:
        :global:如果需要修改全局变量,就只需要在这里声明一个 global x ,就这样就可以改变了,这里就不多说了,很少用到
        '''
        x = 2 #局部变量
        return x
    return x,inside
k,l = out()
print(x)
print(k)
print(l())##l()执行内部函数
# 闭包(+自己的理解,也应该有偏差)
    #什么是闭包?
    ##:看了专业解释:闭包(closure)就是引用了自由变量的函数(外部变量)。这个被引用的自由变量将和这个函数一同存在
    #简单的来说就是根据不同传入的配置信息得到的不同的结果

# 示例
# def external(addr):
#     '''
#     :return:
#     '''
#     # addr = 100 ##外部变量:局部变量,也就是自由变量
#     def inside(addr_in): ##外层函数中包含的内部函数,称为这个函数—_-!
#         # addr_in = 200
#         # return addr + addr_in
#         #也可以在外面传值
#         return addr + addr_in
#     return inside
# ext = external(100)
# sx = external(200)
# print(ext(300))
# print(sx(300))

# 再来一个闭包的例子
# 用户输入还钱金额
# def User_money():
#     '''
#     :return:闭包总结:在一个外层函数调用内嵌函数,把值传递进去给内嵌的函数使用(也就像上面说的一同存在差不多一个意思),然后执行内嵌函数
#     '''
#     User_Input = int(input("请输入还钱的金额>>:"))###外层函数中变量User_Input和内嵌函数money_z
#     money = 1000000
#     while True:
#         if User_Input < money:
#             User_Input += int(input("你需要还的钱不够,请加点>>:"))
#         else:
#             break
#     def money_z():
#         print("你要还的金额只要 %d 元, 已给你退回 %d 元回你的钱包!!"%(money,User_Input-money))
#     return money_z
#
# x = User_money()
# print(x())

 

posted @ 2018-05-19 11:35  Caionk  阅读(185)  评论(0编辑  收藏  举报