变量进级,基础知识

by admin on 2019年9月26日

变量进级

Python 之 基础知识(五),python基础知识

函数

基本概念

目标

  • 变量的援用
  • 可变和不得变类型
  • 有的变量和全局变量

一、变量

作用

为了
拉长编写制定的频率以及代码的重用,把具备独自功效的代码块协会为二个小模块,那正是函数

概念函数

格式:

def 函数名(参数列表):
    "函数文档字符串"
    函数体
    return 返回值

实例:

def printme(str):
   "打印传入的字符串到标准显示设备上"
   print(str)
   return

在python 中,函数定义必需放在函数调用前边。

01. 变量的援引

  • 变量 和 数据 都以保留在 内存 中的
  • Python函数 的 参数传递 以及 返回值 都是靠
    引用 传递的

1、引用 id()

函数字传送参 与 重返值 都是传递保存的数码的援引

bf88必发唯一官网 1

bf88必发唯一官网 2

格式

def 函数名():
    代码

函数调用

格式:

函数名(参数列表)

实例:

printme("我要调用用户自定义函数!");

1.1 引用的定义

Python

  • 变量数据 是分开积累的
  • 数据 保存在内部存款和储蓄器中的二个岗位
  • 变量 中保存着多少在内部存款和储蓄器中的地点
  • 变量笔录数据的地点,就叫做 引用
  • 使用 id() 函数能够查看变量中保留数据所在的 内部存款和储蓄器地址

只顾:倘若变量已经被定义,当给二个变量赋值的时候,本质上是
修改了数量的引用

  • 变量 不再 对在此之前的数目引用
  • 变量 改为 对新赋值的数目援用

2、可变和不足变类型(变量的引用地址只在赋值语句后变卦)

  • 不足变类型  内部存款和储蓄器中的数目分歧意被涂改
  • 可变类型  内部存款和储蓄器中的数据足以被退换

调用函数

函数名()  

变量进级,基础知识。函数的文书档案表明

函数的首先行语句能够选取性地运用文书档案字符串—用于寄放函数表达。
能够经过help(函数名),获取这些注明

1.2 变量引用 的示例

Python 中,变量的名字好像于 便签纸 贴在 数据

  • 概念二个卡尺头变量 a,何况赋值为 1
代码 图示
a = 1
  • 将变量 a 赋值为 2
代码 图示
a = 2
  • 概念四个整数变量 b,並且将变量 a 的值赋值给 b
代码 图示
b = a

变量 b 是第 2 个贴在数字 2 上的标签

 3、局地变量和全局变量

  • 函数内部不允许直接修改全局变量的引用–固然用赋值语句修改全局变量的值
  • 那么什么样在函数内部修改全局变量的值?
    • 利用global命令进行宣示  
    • global关键字会告诉解释器前面包车型客车变量是三个全局变量
    • 再用赋值语句时就不会创制局地变量
  • bf88必发唯一官网 3
  • bf88必发唯一官网 4
  • 全局变量前能够加g_ / gl_(快速键 shift+F6 修改名字)

函数的文书档案表达

方便掌握函数的功力,便于维护

def demo(arg1: int, arg2: str, arg3=None):
    """

    我是函数的文档说明

    :param arg1: int 参数1

    :param arg2: str 参数2

    :param arg3: 默认为None

    :return: None

    """

    # 鼠标左键点一下函数,Ctrl + Q
    pass

bf88必发唯一官网 5

函数的文书档案表达


函数参数

def test(a, b):
    print(a, b)
test(10, 20)

传送参数顺序和接受参数顺序依次对应
变量进级,基础知识。概念时小括号中的参数,用来收纳参数用的,称为 “形参”
调用时小括号中的参数,用来传递给函数用的,称为 “实参”

1.3 函数的参数和重临值的传递

Python 中,函数的 实参/返回值 都以是靠 引用 来传递来的

def test:    print("-" * 50)    print("%d 在函数内的内存地址是 %x" % (num, id    result = 100    print("返回值 %d 在内存中的地址是 %x" % (result, id    print("-" * 50)    return  resulta = 10print("调用函数前 内存地址是 %x" % idr = testprint("调用函数后 实参内存地址是 %x" % idprint("调用函数后 返回值内存地址是 %x" % id

二、函数

函数参数

首要字参数

主要字参数和函数调用关系密不可分,函数调用使用首要字参数来规定传入的参数值。
动用主要字参数允许函数调用时参数的次第与注脚时不相同,因为 Python
解释器能够用参数名相配参数值。

#可写函数说明
def printinfo( name, age ):
    "打印任何传入的字符串"
    print ("Name: ", name)
    print ("Age ", age)

#调用printinfo函数
printinfo( age=50, name="miki" )

02. 可变和不可变类型

  • 不得变类型,内部存款和储蓄器中的数据不容许被涂改:
    • 数字类型 int, bool, float, complex, long
    • 字符串 str
    • 元组 tuple
  • 可变类型,内部存款和储蓄器中的数据足以被修改:
    • 列表 list
    • 字典 dict

a = 1a = "hello"a = [1, 2, 3]a = [3, 2, 1]

demo_list = [1, 2, 3]print("定义列表后的内存地址 %d" % id(demo_list))demo_list.appenddemo_list.popdemo_list.removedemo_list[0] = 10print("修改数据后的内存地址 %d" % id(demo_list))demo_dict = {"name": "小明"}print("定义字典后的内存地址 %d" % id(demo_dict))demo_dict["age"] = 18demo_dict.pop("name")demo_dict["name"] = "老王"print("修改数据后的内存地址 %d" % id(demo_dict))

注意:字典的 key 只能利用不可变类型的多寡

注意

  1. 可变类型的多少变化,是由此 方法 来完毕的
  2. 一旦给三个可变类型的变量,赋值了叁个新的数量,引用会修改
    • 变量 不再 对前面包车型大巴数量引用
    • 变量 改为 对新赋值的多少援引

1、元组能够再次回到多少个值

bf88必发唯一官网 6

bf88必发唯一官网 7

怎么是参数?参数的作用?

概念函数时,在小括号“()”中间的,使用的标记符,叫做参数,多个参数之间接选举拔“,”(逗号)分隔。
作用:为了让同叁个函数能够举行出不相同的结果,提升函数的八面见光

缺省参数

调用函数时,缺省参数的值若无传来,则被感觉是暗中认可值

def printinfo( name, age = 35 ):
   # 打印任何传入的字符串
   print "Name: ", name
   print "Age ", age

# 调用printinfo函数
printinfo(name="miki" )
printinfo( age=9,name="miki"

留心:带有暗许值的参数一定要放在参数列表的最终面,不然报错。

哈希 “

  • Python 中存放有贰个名字叫做 hash 的函数
    • 收纳四个 不得变类型 的多寡作为 参数
    • 返回 结果是贰个 整数
  • 哈希 是一种 算法,其功用正是提取数据的 特征码
    • 一致的剧情 得到 一直以来的结果
    • 不等的剧情 得到 不等的结果
  • Python 中,设置字典的 键值对 时,会首先对 key 进行 hash
    已决定哪些在内部存款和储蓄器中保存字典的数据,以方便 后续
    对字典的操作:增、删、改、查

    • 键值对的 key 必得是不可变类型数据
    • 键值对的 value 能够是即兴档案的次序的数额

2、调换多个变量

# 等号右边是一个元组,只是省略了括号
a,b = b, a

概念带参函数

def add2num(a, b):  # 参数根据需要数量可变,定义函数时的参数,叫做形参
    c = a+b
    print c

不定长参数

你也许要求二个函数能处理比那时声称时更加多的参数。这个参数叫做不定长参数,和上述2种参数不一致,注脚时不会取名

加了星号(*args)的变量名会贮存全部未命名的变量参数,args是四个元组:

def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print "输出: "
   print arg1
   for var in vartuple:
      print var
   return;

# 调用printinfo 函数
printinfo( 10 );
printinfo( 70, 60, 50 );

**args的变会寄存命名参数,即形如key=value的参数, args为字典:

def test(a, **b):
    print(a)
    # b 是一个字典 {'c': 1, 'd': 3, 'b': 2}
    print(b)

test(10, c=1,b=2,d=3)

03. 部分变量和全局变量

  • 一对变量 是在 函数内部 定义的变量,只可以在函数内部选取
  • 全局变量 是在 函数外界定义
    的变量(未有概念在某二个函数内),具有函数 内部
    都可以动用这些变量

晋升:在其余的费用语言中,很多 不引入使用全局变量 ——
可变范围太大,导致程序不好维护!

3、在函数内部使用方法修改可变参数会影响外界实参

调用带有参数的函数

 # 调用时函数的参数,叫做实参,
 # 实参的数量必须与形参的数量一样,且位置一一对应。
 # 如下 实参11 对应形参a 
add2num(11, 22) 

函数重临值

想要在函数中把结果回到给调用者,要求在函数中运用return。不带参数值的return语句再次回到None

def sum(a, b):
    return a + b

# 使用一个变量保存返回值
res = sum(10, 20)
print(res)

要么也得以使用元组重返多个值

def test(a, b):
    j = a // b
    i = a % b
    return i, j

# 使用元组多重赋值
i, j =  test(10, 3)
print(i , j)

3.1 局部变量

  • 部分变量 是在 函数内部 定义的变量,只好在函数内部选取
  • 函数实践完结后,函数内部的一些变量,会被系统回收
  • 今非昔比的函数,能够定义一样的名字的一对变量,不过 互相之间
    不会产生耳濡目染

4、列表变量境遇+= 本质上是执列表变量的extend方法

bf88必发唯一官网 8

函数的再次回到值

什么是再次回到值?为何要求重临值?
在函数中,使用return 关键字重临的数目叫做函数的再次回到值。
功用:为了得到函数的管理结果,比如希望收获八个数相加的结果

包蕴重返值的函数

def add2num(a, b): 
    c = a+b
    return c

收到函数的重回值

# 调用函数,将函数的返回值赋值给变量,通过变量使用返回值
result = add2num(100,98)  

4种函数的花色

函数遵照有没有参数,有没有重返值,能够互相结合,一共有4种

  1. 无参数,无再次回到值
  2. 无参数,又反悔
  3. 有参数,无重临值
  4. 有参数,有重临值

有个别变量的作用

  • 在函数内部接纳,临时 保存 函数内部供给运用的数码

def demo1():    num = 10    print    num = 20    print("修改后 %d" % num)def demo2():    num = 100    printdemo1print("over")

5、缺省参数(给有个别参数钦命的贰个暗中认可值)

  • bf88必发唯一官网 9
  • 事例:(一般采用最广泛的值作为缺省参数的默许值)
    • bf88必发唯一官网 10
  • 包含私下认可值的缺省参数要放在参数列表的结尾!!!
  • 多个有暗中同意值的缺省参数时,要钦赐参数名
    • bf88必发唯一官网 11

多样函数方式

由此参数与再次来到值的重组,可以拿走种种函数情势,能够依附要求灵活运用

无参数,无重返值
无参数,有再次回到值
有参数,无重回值
有参数,有再次回到值

bf88必发唯一官网 12

各种函数方式


函数参数传递难点

在 python
中,类型属于对象,变量是平昔不项目。变量只是多少个援引,能够知晓为c的指针,那一个援引能够施行别的类型

Python中等高校函授数参数是引用传递(注意不是值传递)。对于不可变类型,因变量无法改改,所以运算不会影响到变量本人;而对此可变类型来说,函数体中的运算有比比较大希望会变动传入的参数变量

部分变量的生命周期

  • 所谓 生命周期 就是变量从 被创建被系统回收 的过程
  • 一对变量函数实践时 才会被创造
  • 函数试行完成后 局地变量 被系统回收
  • 有的变量在生命周期 内,能够用来累积 函数内部一时采纳到的多寡

6、多值参数(函数要拍卖的参数个数不分明)

  • 参数名前增添一个* 能够吸收接纳元组
  • 参数名前扩大二个** 基本上能用字典

 一般习惯以下八个名字:

  • *args  寄放元组参数    arguements的缩写    变量的意思
  • **kwargs  贮存元组参数    keyword的缩写    键值对参数的意思

一对变量

如何是局地变量?成效是什么?

概念在函数内部的变量,叫做局地变量。在差别函数内部能够有同一名字的片段变量,然则他们中间互不干扰。
效果:在函数内有的时候保存数据,让数据方便使用。

# a,b,c 都是局部变量
def add2num(a, b):
    c = a+b
    print c

可改变(mutable)与不足退换(immutable)对象

在 python 中,strings, tuples, 和 numbers 是不可退换的目的,而 list,dict
等则是能够修改的对象。

不得变类型:变量赋值 a=5 后再赋值 a=10,这里其实是新兴成叁个 int 值对象
10,再让 a 指向它,而 5 被放任,不是改造a的值,约等于新生成了a。

可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la
的第多个成分值改造,本人la未有动,只是当中间的一部分值被退换了

3.2 全局变量

  • 全局变量 是在 函数外界定义
    的变量,全体函数内部都能够使用那一个变量

# 定义一个全局变量num = 10def demo1():    printdef demo2():    printdemo1print("over")

注意:函数实行时,急需管理变量时 会:

  1. 首先 查找 函数内部 是还是不是存在 点名名称
    的一对变量
    如若有,直接动用
  2. 若是未有,查找 函数外界 是或不是存在 点名名称
    的全局变量
    若果有,直接接纳
  3. 要是还未曾,程序报错!

 拆包

bf88必发唯一官网 13

例子:

bf88必发唯一官网 14

 

之 基础知识(五),python基础知识 一、变量
1、援用 id() 函数字传送参 与 重返值 都以传递保存的多寡的援引2、可变和不可变类型(变量…

全局变量

如何是全局变量?作用是哪些?

概念在函数外界的变量,叫做全局变量。
效果:全局范围内都足以动用的变量

# 定义全局变量
a = 100

def test1():
    print(a)  # 虽然没有定义变量a但是依然可以获取其数据

def test2():
    print(a)  # 虽然没有定义变量a但是依然可以获取其数据

一些变量与全局变量同名难题

a =100  # 全局变量

def add2num(a, b):   # 局部变量
    c = a+b
    return c
  • 函数内部,使用的是有个别变量的值
  • 函数外界,或其余函数内部,使用的全局变量的值

修改全局变量的值

  • 只要在函数中冒出global
    全局变量的名字,那么那些函数中不怕出现和全局变量名同样的 变量名 =
    数据,也通晓为对全局变量举办修改,并非概念局部变量。
  • 举例在一个函数中必要对多少个全局变量进行修改,那么能够选拔

     # 可以使用一次global对多个全局变量进行声明
     global a, b
     # 还可以用多次global声明都是可以的
     # global a
     # global b

python 函数的参数字传送递

不得变类型:类似 c++ 的值传递,如
整数、字符串、元组。如fun(a),传递的只是a的值,未有影响a对象自己。譬喻在
fun(a)内部修改 a 的值,只是修改另多少个复制的指标,不会潜濡默化 a 本人

可变类型:类似 c++ 的援用传递,如 列表,字典。如 fun(la),则是将 la
真正的传过去,修改后fun外界的la也会受影响

1) 函数无法一贯退换 全局变量的引用

  • 全局变量 是在 函数外部定义
    的变量(未有概念在某二个函数内),怀有函数 内部
    都足以动用那些变量

升迁:在任何的支出语言中,大多 不引入应用全局变量 ——
可变范围太大,导致程序倒霉维护!

  • 在函数内部,能够 因此全局变量的援用获取相应的多少
  • 但是,不容许直接更换全局变量的引用 ——
    使用赋值语句修改全局变量的值

num = 10def demo1():    print("demo1" + "-" * 50)    # 只是定义了一个局部变量,不会修改到全局变量,只是变量名相同而已    num = 100    printdef demo2():    print("demo2" + "-" * 50)    printdemo1print("over")

专心:只是在函数内部定义了二个某个变量而已,只是变量名一样 ——
在函数内部不可能直接改造全局变量的值

全局变量 与 局地变量的区分

定义

  • 全局变量定义在函数外界
  • 有的变量定义在函数内部

利用限制

  • 全局变量能够在全局范围内采纳。(函数内部、函数外界)
  • 有些变量只好在概念变量的函数内部接纳

修改

  • 全局变量
  • 函数外 能够自便修改
  • 函数内 供给接纳global 先表明之后,技艺修改
  • 局地变量
  • 函数外 不可能使用
  • 函数内 能够随性所欲修改

全局变量和部分变量

局地变量,正是在函数内部定义的变量。
在函数外边定义的变量叫做全局变量,全局变量能够在享有的函数中开展访问。

假定在函数中修改全局变量,那么就要求选拔global举行宣示,不然出错。
一经全局变量的名字和一些变量的名字一样,那么使用的是一对变量的。

在函数中不行使global评释全局变量时不能够改改全局变量的真相是不能够修改全局变量的对准,即不可能将全局变量指向新的数目。
对此不可变类型的全局变量来讲,因其指向的数目不能够改改,所以不行使global时心有余而力不足修改全局变量。
对于可变类型的全局变量来讲,因其指向的数码能够修改,所以不应用global时也可修改全局变量

2) 在函数内部修改全局变量的值

  • 如果在函数中需求修改全局变量,供给使用 global 举行宣示

num = 10def demo1():    print("demo1" + "-" * 50)    # global 关键字,告诉 Python 解释器 num 是一个全局变量    global num    # 只是定义了一个局部变量,不会修改到全局变量,只是变量名相同而已    num = 100    printdef demo2():    print("demo2" + "-" * 50)    printdemo1print("over")

函数间分享数据

  • 全局变量

# 全局变量
a = 0


def func1():
    global a  # 在 func1 里修改全局变量
    a = 100
    print('func1----a=', a)


def func2():
    print('func2----a=', a)  # 在 func2 里可以使用 func1 的计算结果


def func3():
    global a  # 使用全局变量,很容易被第三者修改数据,导致错误
    a = 300
    print('func3----a=', a)


func1()
func3()
func2()
  • 函数字传送参

#  函数传参
def func1():
    a = 100
    print('func1----a=', a)
    return a  # func1 将结果作为返回值处理


def func2(a):
    print('func2----a=', a)  # 在 func2 里可以使用参数来接收 func1 的计算结果


def func3():
    global a
    a = 300
    print('func3----a=', a)


tmp = func1()
func3()
func2(tmp) 
  • 函数的嵌套调用

# 函数嵌套
def func1():
    a = 100
    print('func1----a=', a)
    return a  # func1 将结果作为返回值处理


def func2():
    a = func1()  # 在 func2 里直接调用 func1 并获取返回值
    print('func2----a=', a)


def func3():
    global a
    a = 300
    print('func3----a=', a)


func3()
func2()

无名氏函数

python 使用 lambda 来创建无名氏函数。

  1. lambda只是二个表明式,函数体比def轻易非常多。
  2. lambda的着入眼是多个表明式,并非一个代码块。仅仅能在lambda表明式中封装有限的逻辑进去。表达式的值正是lambda的重临值。
  3. lambda函数具有自身的命名空间,且无法访谈自有参数列表之外或全局命名空间里的参数。
  4. 固然lambda函数看起来只能写一行,却分裂C或C++的内联函数,前者的目标是调用小函数时不占用栈内部存款和储蓄器进而扩充运转效能。

格式:
lambda [参列表]: 表达式

实例:

sum = lambda a, b: a + b

print(sum(10, 20))
print(sum(20, 30))
print ("相加后的值为 : ", sum( 20, 20 ))

3) 全局变量定义的职位

  • 为了保障全数的函数都能够正确运用到全局变量,应该
    将全局变量定义在其他函数的最上端

a = 10def demo():    print("%d" % a)    print("%d" % b)    print("%d" % c)b = 20demo()c = 30

注意

  • 鉴于全局变量
    c,是在调用函数之后,才定义的,在试行函数时,变量还没有定义,所以程序会报错!

代码结构暗暗提示图如下

bf88必发唯一官网 15

函数多重返值以及重临多值

高阶函数

4) 全局变量命名的提出

  • 为了防止有个别变量和全局变量出现模糊,在概念全局变量时,某个公司会有一对付出要求,比方:
  • 全局变量名前应有扩展 g_ 或者 gl_ 的前缀

提醒:具体的须要格式,各厂商供给或然会稍稍差异

多返回值

七个函数依照意况的不如,会油可是生八个return。

def demo(age):
    if age > 17:
        return "成年了"
    elif age > 12:
        return "青少年"
    else: 
        return "少年郎"

闭包

python支持闭包

回到多值

同一个return,能够回来多少个值。这里供给容器,来存放在八个值。
容器有
String(字符串)、List(列表)、Tuple(元组)、Dictionary(字典)、Set(集合),固然有那样多容器
引入应用List(列表)、Tuple(元组)、Dictionary(字典)

为啥不引入应用String(字符串)、Set(群集)
 
因为String(字符串)能够 split()
字符串,能够生出二个列表,所以不及间接行使列表
Set(集合)不能积存重复数据,并且无法积攒列表,字典,集合

def divid(a, b):
    quotient = a//b
    residue = a%b 
    return quotient, residue  # 默认是元组

def divid(a, b):
    quotient = a//b
    residue = a%b 
    return [quotient, residue]  # 使用列表

def divid(a, b):
    quotient = a//b
    residue = a%b 
    return {"quotient":quotient, "residue":residue}  # 使用字典

函数作为参数或再次回到值

def sum(a, b, func):
    return func(a) + func(b)


# 返回一个函数
def getFunc():
    def fun(a):
        return a * a

    return fun


print(sum(1, 2, getFunc()))

函数参数

缺省参数

怎么样是缺省参数? 调用函数时,缺省参数的值若无传来,则取默许值。

def demo(args1,args2=""):  # args2 就是缺省参数
    pass

不定长参数

  • *args, 在变量args前应用三个 *
    (星号),表示用元组接收无人接受的地点参数
  • **kwargs,在变量kwargs前应用叁个 **
    (五个星号),表示用字典接收无人吸取的严重性字参数

def demo(args1, *args, **kwargs):
    print(args)

    print(kwargs)


demo(1, 2, 3, 4, 5, name="qwer", age=17, sex="gg")

bf88必发唯一官网 16

不定长参数


拆包

bf88必发唯一官网 17

拆包

交流变量的值

  • 中等变量

a = 4
b = 5
c = 0

c = a
a = b
b = c
  • 数学生运动算

a = 4
b = 5
a = a+b  # a=9, b=5
b = a-b  # a=9, b=4
a = a-b  # a=5, b=4
  • 卷入拆包

a, b = 4, 5
a, b = b, a

引用

变量通过数量在内部存款和储蓄器中的开始地址来读取数据

bf88必发唯一官网 18

引用

不得变类型

怎么样是不足变类型
不可变,数据内容不可变。因为数量内容不可变,如果改变变量的值,则援引的地址会产生变化

  • Number(数字)

bf88必发唯一官网 19

不可变类型-Number

  • Boolean(布尔)
![](https://upload-images.jianshu.io/upload_images/11415306-9026c06cf0a28d6c.png)

不可变类型-Boolean
  • String(字符串)
![](https://upload-images.jianshu.io/upload_images/11415306-8d0b19060d859a83.png)

不可变类型-String

  • bf88必发唯一官网 ,Tuple(元组)

bf88必发唯一官网 20

不足变类型-Tuple

可变类型

何以是可变类型

可变,数据内容可变。因为数量内容可变,如若改变变量的值,则援用的地址不会产生变化

  • List(列表)
![](https://upload-images.jianshu.io/upload_images/11415306-90d4e6e8c0329d4b.png)

可变类型-List
  • Dictionary(字典)
![](https://upload-images.jianshu.io/upload_images/11415306-19a5b5da60d0d99d.png)

可变类型-Dictionary
  • Set(集合)
![](https://upload-images.jianshu.io/upload_images/11415306-8070a241dbe814a8.png)

可变类型-Set

到此结 DragonFangQy 2018.4.7

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图