• 2.Python函数/方法(method/function)详解


    1.什么是函数

    它是一段功能代码,理解为一种功能行为,在内存中有空间区域,函数需要被调用才能执行(通过函数名来调用);

    好处:

    1).提高代码的复用性

    2).提升代码的阅读性

    3).增加代码的扩展性

    4).增强了代码的维护性

    2.函数有五要素组成

    ①.函数修饰符                    关键字def开头

    ②.函数返回值类型             有返回值(类型:int、float、str、list...)/没有返回值

    ③.函数名                           函数的名字(标识符一种,满足规则和规范)

    ④.形参列表                        定义在小括号内(可能有形参,也可能没有)

    ⑤.函数体                           一段业务逻辑代码

    3.定义格式

                    ① ③(④):

                       ⑤

    4.函数名的定义

    标识符的一种,满足规则和规范:

    对于其规范,和变量名保持一致

    5. 自定义函数的四种定义场景

    1).无参无返回值

    2).无参有返回值

    3).有参无返回值

    4).有参有返回值

    演示自定义函数的四种场景:

     1 #1无参无返回值
     2 def func1():
     3     print('hello method...')
     4 
     5 #2无参有返回值
     6 def func2():
     7     return True
     8 
     9 #3有参无返回值
    10 def func3(a,b):
    11     print(a + b)
    12 
    13 #4有参有返回值
    14 def func4(a,b):
    15     #在自定义函数中调用本模块(.py文件)别的自定义函数
    16     func1()
    17     return a if a > b else b

    6.形参列表的多种定义情况:

    演示形参的多种定义情况:

    1). 默认参数的使用:

    1 def func1(name="张三",age=18,height=175.5):
    2     print(name,age,height)
    3 
    4 # 调用自定义函数(不传递参数):会使用默认参数参与之后的运算
    5 func1()
    6 # 调用自定义函数(传递部分参数):传递的部分使用传递内容,其余部分使用默认参数参与运算
    7 func1("李四")

    2). 一般参数的使用

    1 def func2(name,age,address):
    2     print(name,age,address)
    3 
    4 #调用自定义函数:必须传递参数,而且位置和个数都要对的上
    5 func2("李雷",21,"北京")

    3). 关键字参数的使用:(好处:不用记住每个变量的位置)

    1 def func3(name,age,address):
    2     print(name,age,address)
    3 
    4 #体现在调用自定义函数上:传递类型键值对的组合
    5 func3(address="上海",name="韩梅梅",age=20)
    7.可变参数的使用

    在定义一项功能时,对于参数层面(到底几个不确定),此时可以使用可变参数来实现;
    参数解释:*args:接受0~无穷多个单值,存入到一个元祖中返回; **kwargs:接受0~无穷多个键值对组合,存入到一个字典中返回。

    1 def func4(*args,**kwargs):
    2     print(args,type(args))      # 元祖类型
    3     print(kwargs,type(kwargs))  # 字典类型
    4 
    5 func4()

    案例1:实现多个整数求和的操作

    自定义函数:两个原则

    1).有没有形参?   有,但是个数不确定,使用可变参数

    2).有没有返回值?   可有可无

    1 def mySum(*args):
    2     sum1 = 0
    3     for i in args:
    4         sum1 += i
    5     return sum1
    6 
    7 mySum = mySum(1,2,3,4,5)
    案例2:
    1 def func1(*args,**kwargs):
    2     print(args)
    3     print(kwargs)
    4 
    5 func1(0,100,3.14,True,"abcd",[10,20,30],name="班长",age=25)
    6 
    7 # 以下代码会报错:因为*args定义在前,**kwargs定义在后,由于在传递参数的过程中已经出现了类似name="班长",
    8 # age=25这样的代码,那么其后就不能出现单值数据的传递了
    9 func1(0,100,3.14,True,"abcd",[10,20,30],name="班长",age=25,-100,3.14)

    【注意事项】:

    1).形式参数(形参):它可以认为是一个入口(在函数名后面的小括号中定义),并不存在实际数据,在代码的体现上就是定义变量,等着接受实参;

    2).实际参数(实参):实实在在存在的数据(可以是各种类型),将实际参数传递给形式参数(过程:称为参数传递),之后在函数体中参数运算的都是实际参数

    3).返回值:在整个函数执行完毕后需不需要返回给程序一些数据(分类:有返回值/没有返回值)

    如果有返回值:需要使用关键字return进行数据的返回

    4).return关键字的作用:

    (1).将需要返回的数据给到函数的调用处(调用者)

    (2).表示函数的结束

    (3).和return关键字在同一作用域,在其后面不要去定义任何的代码,因为永远不可能被执行到

    (4).return关键字后面也可以不定义任何的内容,它的作用仅仅意味着函数结束了...

    8.全局变量&局部变量

    全局变量: 1).作用域比较大,定义在.py文件中,函数外;2).可以被文件中任何一个函数所使用。

    局部变量:1).作用域比较小,函数的形参或者函数体中; 2).只能被当前的这个函数所使用,出了此函数,外部够不着它。

    在局部位置修改全局变量的值:先使用global关键字定位到需要修改的全局变量,然后在使用全局变量 = 值操作进行修改。

    在内部函数中修改外部函数中局部变量的值:先使用nonlocal关键字定位到需要修改的局变变量,再使用局部变量 = 值操作进行修改。

     1 a=10     #a为全局变量
     2 def func1():
     3     global a
     4     a=20
     5     print(a)
     6 def func2():
     7     b=100    #b为局部变量
     8     print(a,b)
     9 
    10 # 以下代码有问题:因为b是属于func2()函数中的局部变量,出了func2()函数 外界都不能使用
    11  print(b)

    9.外部函数&内部函数

    内部函数:定义在外部函数的内部,成为其一部分(认为是外部函数的成员)

     1 def outer():
     2     print("我是外部函数...")
     3     b=20
     4     def inner():
     5         print("我是内部函数...")
     6         nonlocal b
     7         b=30
     8         print(b)
     9     inner()
    10     print(b)
    11 outer()
    12 
    13 # 以下代码有问题:对于内部函数的执行只能依赖于它的外部函数,不能出了外部函数在外界单独执行;
    14 inner( )

    [补充概念】:

    1.标识符

    大白话:凡是可以自己起名字的地方,都是标识符

    遵守以下三点规则

    1).范围:a~z、A~Z、0~9、下划线(_)

    2).数字不能开头:abc123 合法   ;  123abc 不合法

    3).不能使用关键字和保留字,但是可以包含关键字和保留字 :class 不合法 ; classroom 合法

    遵守以下两点规范

    1).驼峰式原则

    对于变量而言:如果是多个单词组成,第一个单词首字母小写,其余单词首字母大写,剩余字母全部小写。举例:helloWolrdChina

    2).下划线原则

    举例:hello_world

    2.常量和变量

    常量:一旦定义,其值不可变;例如:0、100、3.14、True/False、"abc"...

    变量:它是内存中的一块存储区域,可以存储数据,并且随时可以改变区域中的内容,

     第一次存储进去的数据我们称为初始化值;

    变量的定义格式:

    1).变量名 = 值

    2).变量名1,变量名2,...,值n = 值1,值2,...,值n

    3).变量名1 = 变量名2 = ... = 变量名n = 值

    3.弱&强类型语言

    强类型语言:在定义变量的时候,就需要有明确的数据类型;

    弱类型语言:在定义变量的时候,不需要有明确的数据类型;

    4.关键字

    理解:被python语言赋予特殊函数的英文单词           例如:class、if、else、while、for...

    5.内置函数

    执行可以通过定义函数名执行成功的都是内置函数;函数之间是可以嵌套调用的(案例中有体现)。常用的内置函数:round();abs();max();min();sum();hex();oct();bin();pow(x,y);divmod(x,y);ord();chr();type();id();len() ...

    1). round(num1,num2):得到四舍五入之后的值;round里面的的第一个参数是接收的变量,第二个参数是保留多少位小数(可不填,表示保留整数位)

    2). abs(num):得到数据的绝对值,特点:不管正数还是负数的绝对值都是其正数的形式,0的绝对值还是0

    3). max(seq)、min(seq):得到seq对象的最大、最小值

    4). sum(seq):得到seq中所有元素累加以后的和值返回

    【注意事项】:1).对于str类型的数据不能使用sum()求和,没有意义。2).对于sum()函数只能接受容器类型数据,不能接受多个单值数据

    1 # 以下两个函数就是非法的
    2 print(sum('12345'))
    3 print(sum(1,2,3,4,5))

    5). hex(num):将十进制数据num转换为十六进制返回(数据类型:str)

    6). oct(num):将十进制数据num转换为八进制返回(数据类型:str)

    7). bin(num):将十进制数据num转换为二进制返回(数据类型:str)

    8). pow(x,y):计算x的y次方返回

    9). divmod(x,y)返回一个元祖对象,有两个元素,第一个元素记录了x除以y后的商,第二个元素记录了x除以y后的余数

    10). ord(str)传入字符数据,返回整数值(ascii码值)

    11). chr(num)传入整数数据(ascii码值),返回字符数据

    【补充】字符编码(字符集),记住3个分界点: '0' -->  48; 'A'  -->  65; 'a'  -->  97

    12). type():得到数据的类型返回

    13). id():得到数据的内存地址(十进制的形式)返回

    14). len():得到数据的长度

  • 相关阅读:
    redisTemplate
    HttpURLConnection下载文件流
    Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
    https请求
    将一个 JavaBean 对象转化为一个 Map
    Redis实现简单消息队列
    Spring Boot RestTemplate文件上传
    获取java栈异常
    获取 *.properties配置文件内容
    java格式化json串
  • 原文地址:https://www.cnblogs.com/bonheur/p/11924038.html
Copyright © 2020-2023  润新知