zoukankan      html  css  js  c++  java
  • 08函数

      1 """
      2 小结:
      3 函数:
      4 print(),input(),len(),max(),min(),str(),list(),
      5 tuple(),dict(),set(),frozenset()
      6 系统内部定义好的函数
      7 for while True False in not in is is not
      8 用户定义的函数,函数名()
      9 """
     10 """
     11 函数是提前组织好的,完成一个任务的特定的代码块。
     12 定义格式:
     13 def 函数名 (形参):形式参数
     14     "函数的说明文档
     15     代码块
     16     return 表达式
     17 函数体最好与上下文各空两行
     18 函数要先定义后调用,一般定义写在文件的最上方
     19 函数名,要符合标识符的命名规则
     20 函数调用,函数名(实参)实际参数
     21 定义完之后没有任何执行
     22 """
     23 
     24 # def add_1(a, b):  # 函数的定义
     25 #     """用于求两个数的和"""
     26 #     c = a + b
     27 #     print(c)
     28 #     return c  # 函数的返回值
     29 
     30 
     31 # result = add_1(10, 20)  # 函数的调用,10 20 实参,分别赋值给a和b结果返回赋值给result
     32 # print(result)
     33 # # 计算0-100之间的整数和
     34 # result = 0
     35 # for i in range(0, 101):
     36 #     result += i
     37 # print(result)
     38 # # 调用函数,实现0-10之间的整数和
     39 # result = 0
     40 # # add_1(0)  # TypeError: add_1() missing 1 required positional argument: 'b'
     41 # print(help(add_1))  # 查看自己定义的函数的功能,说明文档
     42 
     43 
     44 # def add2num(a, b):
     45 #     c = a + b
     46 #     print(c)
     47 
     48 
     49 # add2num(11, 22)
     50 
     51 """
     52 函数的参数:
     53 1.位置参数:通过参数定义和调用的位置来确定的参数
     54 2.关键字参数:函数在调用传入实参时,使用原来的  形参名=值  这种形式来调用函数并传参
     55   要在位置参数的后面,调用函数时。可以跟原来的函数定义时的形参顺序不一样
     56 3.默认值参数:函数在定义时,已经提前给形参赋值了默认(default)值,在调用函数传参时,如果默认值
     57   参数没有被传值,就使用原来的默认值,如果传了值就是用新的值,要跟在位置参数的后面,定义函数时
     58 4.不定长参数:
     59 """
     60 
     61 # 如果(a=20,b,c)把默认参数写在了位置参数的后边,就会报如下错误:
     62 # SyntaxError:non-default argument follow default argument
     63 # def fun_1(a, b, c=80):  # a,b,c都是位置参数,c是默认值参数,c要跟在a,b的后边
     64 #     return a, b, c
     65 
     66 
     67 # print(fun_1(10, 20, 30))  # 位置参数
     68 # # 10位置参数,c=30,b=20关键字参数,关键字参数必须跟在后边,否则就报错
     69 # print(fun_1(10, c=30, b=20))  # 位置参数与关键字参数混用
     70 # # SyntaxError: positional argument follows keyword argument
     71 # # print(fun_1(c=30,b=20,10))
     72 # print(fun_1(10, b=20))  # c没有被传值,就使用默认值80
     73 
     74 
     75 # def add3num(a, b, c=100):  # a,b是位置参数;c=100默认值参数
     76 #     print(a)
     77 #     print(b)
     78 #     print(c)
     79 #     return a+b+c
     80 #
     81 #
     82 # result = add3num(a=30, b=50, c=200)  # 30位置参数;b=50,c=200  关键字参数调用时
     83 # print(result)
     84 
     85 
     86 """
     87 函数参数的第四种类型:不定长参数,将形参包裹
     88 语法格式:del fun_1([formal_a],*args,**kwargs)
     89 1.formal_a   普通参数
     90 2.*args  元组的形式来接收多余的普通的实参(不是关键字实参,直接写实参)
     91 3.**kwargs字典的形式来接收多余的关键字参数(m=10,n=20)
     92 注意,**kwargs要跟在*args后边,*args要跟在普通参数的后边
     93 """
     94 
     95 """
     96 传实参时,可以解包裹,*args,**kwargs
     97 *args 用于直接将元组中的元素传给形参
     98 **kwargs 用于直接将字典中的键值对传给形参
     99 与上边的打包裹是两个独立的过程
    100 """
    101 
    102 # def fun_1(a, b, *args, **kwargs):
    103 #     print(a)
    104 #     print(b)
    105 #     print(args)
    106 #     print(kwargs)
    107 
    108 
    109 # fun_1(10, 20)  # 10传给a,b传给20
    110 # fun_1(10, 20, 30, 40, 50)  # 10传给a,b传给20;30;40,50全部传给args,args以元组的形式来保存这三个实参
    111 # fun_1(10, 20, 30, 40, 50)
    112 # # 10-a,b-20;30;40;50全部传给args,aegs以元组形式来保存这三个实参
    113 # # m=60,n=70,x=80,y=90关键字参数会赋值给kwargs,kwargs以字典的形式来保存数据
    114 # fun_1(10, 20, 30, 40, 50, m=60, n=70, x=80, y=90)
    115 # def fun_1(a, b, c):  # 三个普通的位置参数
    116 #     print(a)
    117 #     print(b)
    118 #     print(c)
    119 
    120 
    121 # args = (1, 2, 3)
    122 # # TypeError: fun_1() missing 2 required positional arguments: 'b' and 'c'
    123 # # fun_1(args)  # 解包裹,将元组中的三个包裹分别传给a,b,c
    124 # fun_1(*args)
    125 # kwargs = {"a": 10, "b": 20, "c": 30}
    126 # # ypeError: fun_1() missing 2 required positional arguments: 'b' and 'c'
    127 # # fun_1(kwargs)
    128 # fun_1(**kwargs)
    129 
    130 """
    131 混合使用的基本原则如下:
    132 (1)先位置参数传递。
    133 (2)再关键字参数传递。
    134 (3)再可变参数传递。 *args  **args
    135 """
    136 
    137 """
    138 函数的返回值:
    139 1.无return,返回None
    140 2.return a  ,返回一个值,返回值的数据类型就是后边那个值的类型
    141 3.return a,b,c,返回值大于1,返回值就是元组,元组的形式来保存这些值
    142 """
    143 
    144 # def fun_1():
    145 #     print("hello world!")
    146 # # hello world!
    147 #
    148 # result = fun_1()
    149 # print(result)
    150 # print(type(result))
    151 # # None
    152 # # <class 'NoneType'>
    153 #
    154 #
    155 # def fun_2(a, b):
    156 #     c = a + b
    157 #     return c
    158 #
    159 #
    160 # result_1 = fun_2(10, 100)
    161 # print(result_1)
    162 # print(type(result_1))
    163 # # 110
    164 # # <class 'int'>
    165 #
    166 #
    167 # def fun_3(a, b, c):
    168 #     return a, b, c
    169 #
    170 #
    171 # result_2 = fun_3(100, 200, 300)
    172 # print(result_2)
    173 # print(type(result_2))
    174 # # (100, 200, 300)
    175 # # <class 'tuple'>
    176 
    177 """
    178 函数定义时的四种类型
    179 1.无参数,无返回值
    180 2.有参数,无返回值
    181 3.无参数,有返回值
    182 4.有参数,有返回值
    183 """
    184 
    185 # 1.无参数,无返回值,经常用于显示菜单
    186 # def print_menu():
    187 #     print("---1907c火锅城点菜系统  v8.8---")
    188 #     print("1.清汤火锅")
    189 #     print("2.麻辣火锅")
    190 #     print("3.鸳鸯火锅")
    191 #     print("4.咖喱火锅")
    192 #     print("5.蔬菜火锅")
    193 #     print("-----请点菜-----")
    194 #
    195 #
    196 # while True:
    197 #     print_menu()
    198 #     choice = input("请输入您的选择")
    199 #     if choice in ["1", "2", "3", "4", "5"]:
    200 #         print("您选择了%s号火锅,请稍等,马上上菜" % choice)
    201 #         break
    202 #     else:
    203 #         print("选择错误,请重新输入")
    204 #
    205 #
    206 # 2.有参数,无返回值
    207 # def fun_1(a, b):
    208 #     print(a)
    209 #     print(b)
    210 #
    211 #
    212 # fun_1(35, 78)
    213 
    214 
    215 # 3.无参数,有返回值
    216 # def fun_1():
    217 #     return "欢迎光临本店"
    218 #
    219 #
    220 # result = fun_1()
    221 # print(result, "环境优雅,整洁")
    222 
    223 
    224 # 4.有参数,有返回值,频繁使用
    225 # def fun_1(a, b, c):
    226 #     d = (a + b) * c
    227 #     return d
    228 #
    229 #
    230 # result = fun_1    # 函数名可以赋值给另一个变量
    231 # aaa = result(10, 20, 30)  # 通过调用另一个变量,变成函数的调用
    232 # print(aaa)
    233 
    234 
    235 """
    236 函数的嵌套调用:函数中在调用别的函数,函数中在调用自己
    237 """
    238 
    239 # def test_B():
    240 #     print("test_B开始执行")
    241 #
    242 #
    243 # def test_A():
    244 #     print("test_A开始执行")
    245 #     test_B()
    246 #     print("test_A执行结束")
    247 #
    248 #
    249 # test_A()  # 函数调用
    250 """
    251 变量的作用域:
    252 1.局部变量,作用域:函数内部。定义在函数内的变量,只在函数内部起作用
    253 2.全局变量,作用域:全局。定义在函数外的,文件中的变量,可以在文件的任意位置使用,包括函数内
    254 """
    255 """
    256 两个关键字:
    257 1.global  a   :用于在函数中指明使用全局变量a
    258 2.nonlocal b  :???
    259 
    260 """
    261 
    262 # def fun_1(b, c):
    263 #     global result  # 声明当前的result变量用的是全局变量result
    264 #     # a也是全局变量,但是在函数中只是被调用没有被修改值,所以不适用global进行声明
    265 #     result = a + b + c  # a是全部变量的a;b,c是局部变量;result是局部变量
    266 #     # 为什么result是局部变量,a是全局变量
    267 #     # a是直接拿来用,没有重新赋值,result在这里被重新赋值,则变为另一个变量
    268 #     print("函数内的result变量值为%d" % result)
    269 #
    270 #
    271 # a = 100  # 全局变量
    272 # result = 50  # result,全局变量
    273 # fun_1(200, 300)
    274 # print("全局变量result的值为%d" % result)
    275 # # 运行结果:
    276 # # 函数内的result变量值为600
    277 # # 全局变量result的值为50
    278 # # 当我们在fun_1()函数体中,声明了 global result ,结果发生了变化
    279 # # 函数内的result变量值为600
    280 # # 全局变量result的值为600
    281 
    282 """
    283 匿名函数,没有名称的函数,只能完成简单的任务
    284 lambda  a,b,c,...:expression
    285 使用lambda 关键字来声明,参数数量不限,但是只能跟一个表达式,表达式的结果就是函数的返回值
    286 匿名函数可以当做另一个函数的参数进行传递。
    287 匿名函数可以作为内置函数的参数来使用。比如  列表排序sort(key=lambda x:x['name'])
    288 """
    289 # a = lambda x, y: x+y
    290 # print(a(10, 20))
    291 
    292 
    293 # sum_1 = lambda a, b: a+b
    294 # print(sum_1(10, 20))
    295 # print(sum_1(100, 200))
    296 # # 30
    297 # # 300
    298 #
    299 # sum_2 = lambda x, y, z: x+y+z
    300 # print(sum_2(10, 20, 30))
    301 # print(sum_2(100, 200, 300))
    302 # # 60
    303 # # 600
    304 
    305 # # 能计算两个数不同的算数运算的函数
    306 # def fun_1(a, b, c):  # a=10,b=20,c=lambda x,y:x+y
    307 #     print("a=", a)
    308 #     print("b=", b)
    309 #     print("result=", c(a, b))  # c(10, 20)
    310 #
    311 #
    312 # fun_1(10, 20, lambda x, y: x + y)
    313 # fun_1(10, 20, lambda x, y: x - y)
    314 # fun_1(10, 20, lambda x, y: x * y)
    315 # fun_1(10, 20, lambda x, y: x / y)
    316 # # a= 10
    317 # # b= 20
    318 # # result= 30
    319 # # a= 10
    320 # # b= 20
    321 # # result= -10
    322 # # a= 10
    323 # # b= 20
    324 # # result= 200
    325 # # a= 10
    326 # # b= 20
    327 # # result= 0.5
    328 
    329 # list_1 = [{"name": "a", "age": 18}, {"name": "b", "age": 19},
    330 #           {"name": "c", "age": 17}]
    331 # # # TypeError: '<' not supported between instances of 'dict' and 'dict'
    332 # # list_1.sort()
    333 # # 对列表中的数据按照年龄大小进行排序
    334 # list_1.sort(key=lambda x: x['age'])
    335 # print(list_1)
    336 # # [{'name': 'c', 'age': 17}, {'name': 'a', 'age': 18}, {'name': 'b', 'age': 19}]
    337 # # 对列表中的数据按照姓名进行排序。
    338 # list_1.sort(key=lambda x: x['name'])
    339 # print(list_1)
    340 # # {'name': 'a', 'age': 18}, {'name': 'b', 'age': 19}, {'name': 'c', 'age': 17}]
    341 
    342 """
    343 随机数函数,引入随机数模块,引入后使用其中的随机函数
    344 import random  # 写在文件最上方,只需引入一次
    345 1.random.random()  # 随机生成0-1之间的浮点数
    346 2.random.randint(a, b)  # 随机生成大于等于a,小于等于b,之间的整数
    347 """
    348 # import random
    349 
    350 # print(random.random())  # 随机生成0-1之间的浮点数
    351 # print(random.randint(0, 2))  # 随机生成大于等于0且小于等于2之间的整数
    352 
    353 # 使用随机数函数,写猜拳游戏0,1,2分别代表石头剪刀布
    354 # # while True:
    355 # #     get_1 = int(input("请出拳:(0代表布,1代表剪刀,2代表石头)"))
    356 # #     get_2 = random.randint(0, 2)  # 随机生成大于等于0且小于等于2之间的整数
    357 # #     if (get_1 == 0 and get_2 == 2) or(get_1 == 1 and get_2 == 0) or 
    358 # #         (get_1 == 2 and get_2 == 1):
    359 # #         print("电脑出拳是%d,你出的拳是%d,你赢了" % (get_2, get_1))
    360 # #         break
    361 # #     elif get_1 == get_2:
    362 # #         print("平局,请来")
    363 # #     else:
    364 # #         print("电脑出的拳是%d,你出的拳是%d,你输了" % (get_2, get_1))
    365 # 题库。
    366 
    367 
    368 # def func(a1, b1):
    369 #     global a  # 声明此处变量a为全局变量
    370 #     a = a1 + b1
    371 #     print("c =", c)
    372 #     a += c
    373 #     return a  # a=40
    374 #
    375 #
    376 # a = 10
    377 # b = 20
    378 # c = 30
    379 # b = func(a, b)  # 调用func函数,把ab的值作为实参传递,函数的返回值被b接收
    380 # print(a, b)
    381 
    382 """
    383 python创建变量,变量名=值
    384 全局变量,定义在文件中,函数外的变量,可以再文化的任意地方使用
    385 如果要修改这个全局变量的值,就需要使用global关键字进行声明
    386 """
  • 相关阅读:
    Linux XZ格式的解压
    Linux eject弹出光驱
    什么是错误链接/死链接
    什么是相对地址和绝对地址
    网站被K或者降权后应该如何恢复
    网络营销怎么做才有“钱”途
    如何通过seo技术提高网站对用户的友好度
    如何利用微博客进行seo赚钱营销
    做SEO必须制定超越竞争对手网站的方案
    文章很快收录后又被删除的原因
  • 原文地址:https://www.cnblogs.com/zh1127487137/p/12552778.html
Copyright © 2011-2022 走看看