本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!!

  • 变量
    在前面的系列中也许就可以发现,python中的变量和C中的变量有些许不同。比如在C中:
    例子:

     #include <stdio.h>
    
     int main(void)
    {
    /* code */
    int a,b,c;
    int *p,*q,*t; a = ,b=,c=;
    p = &a;
    q = &b;
    t = &c;
    printf("%d\n",p);
    printf("%d\n",q);
    printf("%d\n",t);
    return ;
    }

    输出:

    
    

      从输出结果可以看出,虽然a和c的值是一样的,但是a和c的地址是不同的。也就是说a开始赋值为5开辟了一块空间,当c赋值为5时又会给它分配一块空间。
      但是在python 中就不同,如下的例子。
    例子:

     #----------变量--------
    a = 5
    b = 8
    c = 5
    print id(a) #id(变量名) 用于取变量的地址
    print id(b)
    print id(c)

    输出:

     86995552
    86995516
    86995552

    从上面两个例子中我们可以看出区别:
      1)c语言中定义变量需要定义变量类型,具体这个变量是int、long还是char等等,而python中不关心变量的类型,直接定义变量,它会自己寻找最合适的类型进行存储,可通过type(变量名)来查看变量的类型,在前面的系列中也可以看出python的变量没有类型,比如定义一个字符串str则可以直接:str = "hello"。
      2)c语言中定义变量时不管内存空间中有没有这个值都会重新开辟一块新的空间,而python中如果在内存空间中存在一个相同的值,就不会开辟新空间,直接将变量指向这块空间。

  • 自定义函数
    一、函数的定义规则
      
    #1.def定义函数  2.函数后有":"号  3.以代码缩进表示函数体

      #def 函数名(参数名):
      # '注释内容'
      # 执行语句
      # return
    例子1:

     def add(x,y):
    z = x + y
    return z result = add(3,5)
    print result

    输出:8
    例子2:

    def printName(str):
    '打印任意传入的参数'
    print str
    return

    输出:

     你好,python

    二、函数的调用
      
    1.如果函数在于另一个模块中,则需要import导入模块才能调用;
        2.如果函数在当前模块中,则可以直接调用。

     #如果函数在单独的一个文件 需要先import 文件名
    printName('你好,python') #调用函数
    #比如通过help 查看函数中的注释内容,其实就是使用了python的help函数
    print help(printName)

    三、函数的值传递和引用传递

      在此之前要知道函数的参数有两种:形参和实参
      形参:在函数定义时的变量成为函数的形参,形参主要用于接收调用方传递过来的值或引用;
      实参:函数调用时的实际参数。
      函数的值传递也就是实实在在值的传递问题。
    例子:

     def function1(var):
    '按值传递,修改值'
    var = 100
    print 'id= ',id(var)
    print '函数内取值:',var
    return var =5
    function1(var) #调用函数
    print 'id= ',id(var)
    print '函数外取值:',var #

    输出:

     id=  89814444
    函数内取值: 100
    id= 89813600
    函数外取值: 5

      函数的引用传递传的是一个引用,如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也改变了。
    例子:

     def changeme(mylist):
    '修改传入的列表'
    # mylist =[1111,222,333] #重新进行了赋值操作,变为值传递
    mylist.append([1,2,3,4])
    print 'id= ',id(mylist)
    print '函数内取值:',mylist
    return mylist = [4,5,6,7]
    changeme(mylist) #调用函数
    print 'id= ',id(mylist)
    print '函数外取值:',mylist #

    输出:

     id=  91525568
    函数内取值: [4, 5, 6, 7, [1, 2, 3, 4]]
    id= 91525568
    函数外取值: [4, 5, 6, 7, [1, 2, 3, 4]]

    从上面两个例子中可以看出,其实就是说如果在函数里面对传进来的这个变量进行了赋值(就有了不同空间地址),那么函数内部这个变量的值就改变了,而函数外部还是没有变化,这就是值传递。如果函数里面对传进来的那个变量只是在他原本的基础上(同一块地址上)进行操作,那么函数内部这个变量的值就改变了,而函数外部也跟着变化,这就是引用传递。从C语言的角度来说,值传递和或引用传递也就是地址或值的改变。(个人这样认为,如果你有更好的见解欢迎教小弟一把~底部有联系方式)
    四、函数的参数类型
      python函数的参数类型主要有四种:必备参数、命名参数、缺省参数、不定长参数。
      必备参数:调用方必须以正确顺序传入参数,且数量要和声明时的一样;
      命名参数:调用方用参数的命名确定传入的参数值
      缺省参数:函数的参数可以设置默认值,如果设置了默认值则调用方可以不给它传参而使用默认值
      不定长参数:一个函数可以处理比当初声明时更多的参数,这些参数就是不定长参数
    例子:

     #1必备参数
    def printA(a,b):
    '打印任意传入的参数'
    print a + b
    return
    printA(1,2) #调用函数
    print '-'*30
    #2命名参数
    def printA(a,b):
    '打印任意传入的参数'
    print a + b
    return
    printA(b=1,a=2) #调用函数
    print '-'*30
    #3缺省参数
    def printB(a,b=5): #设置了默认值
    '打印任意传入的参数'
    print 'a=%d'%a
    print 'b=%d'%b
    return
    printB(1) #只传了一个参数,则b使用默认值
    printB(1,2) #若传了两个参数,则不使用默认值

    输出:

     3
    ------------------------------
    3
    ------------------------------
    a=1
    b=5
    a=1
    b=2

    不定长参数是一个函数可以处理比当初声明时更多的参数,不定长参数有两种定义方式。一种是将不定长参数匹配为元组,另一种是将不定长参数匹配为字典。
    例子:

     #不定长参数匹配为元组
    def arglist(a,*b): #不定长参数用*号定义 其本质为一个元组
    print a
    print b
    return
    arglist(1,2,3,5,6) #第一个匹配a,后面的就是一个元组b print '-'*30
    #不定长参数匹配为字典(key-value)
    #例1
    def arglist1(a,**b): #不定长参数用**号定义 其本质为一个字典
    print a
    print b
    return
    arglist1(1,x=2,y=3) #第一个匹配a,后面的就是一个字典b #例2
    def arglist2(**a): #不定长参数用**号定义 其本质为一个字典
    print a
    for key in a:
    print key+' = '+ str(a[key])
    return
    arglist2(x=2,y=3,z=5) print'-'*30

    输出:

     1
    (2, 3, 5, 6)
    ------------------------------
    1
    {'y': 3, 'x': 2}
    {'y': 3, 'x': 2, 'z': 5}
    y = 3
    x = 2
    z = 5

    五、函数的return语句
      python不同与其它编程语言,它的return语句可以返回多个返回值,返回多个值放在一个元组中。
    例子:

     def arglist3():
    print 'call this function'
    return 1,2,3,4,5 res = arglist3() #调用方法
    print res #打印返回值(元组)
    print res[0:3] #同样可以操作这个元组

    输出:

     call this function
    (1, 2, 3, 4, 5)
    (1, 2, 3)

    六、匿名函数
      匿名函数,顾名思义就是没有名字的函数,在python中使用lambda表达式定义。

    #1.得名于省略了用def声明函数的标准步骤
    #2.Lambda函数能接收任何数量的参数但只能返回一个表达式的值
    #3.不能包含多个命令和表达式
    #4.匿名函数不能直接调用print ,因为lambda需要一个表达式,所以需要一个变量来存表达式的值
    #5.lambda函数拥有自己的名字空间,且不能访问自由参数列表之外或全局名字空间里的参数
    #6.lambda函数的语法只包含一个语句,例如,函数名=lambda [参数1,参数2,...] :表达式
    例子:

     sum = lambda arg1,arg2 : arg1+arg2
    print sum(5,3) #调用sum函数
    print type(sum)

    输出:

     8
    <type 'function'>
  • 局部变量和全局变量
    一般地,在函数体内部定义的变量是局部变量,只能在函数体内部访问(可以使用global关键字将局部变量定义为全局变量),而不包含于任何一个函数的,或者说是与main函数属于同一级的是全局变量,可以在main函数中任何地方使用(如果要在某函数体内部修改全局变量的值,使用global关键字)。
    函数在调用时就会全部解析函数体,如果函数体内有定义和全局变量同名的局部变量,则函数体使用的是局部变量,在定义之前使用则会出错;但是如果整个函数体都没有定义该变量,它可以直接调用全局变量
    例子:

     def function1():
    #print num1 #在定义之前打印(报错)
    num1 = 10
    global num2
    num2 = 20
    print num1
    num1=5
    function1()
    print num1
    print num2 #调用全局变量num2

    输出:

     10
    5
    20

Python基础笔记系列九:变量、自定义函数以及局部变量和全局变量的更多相关文章

  1. Python基础笔记系列十一:标准输入输出、文件读写和指针等操作

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 标准输入输出一.输入 在sublime中这个时候需要安装SublimeRE ...

  2. Python基础笔记系列一:基本工具与表达式

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 工具基础(Windows系统下)传送门:Python基础笔记系列四:工具的 ...

  3. Python基础笔记系列十:模块

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 模块 #1.类比于java中的jar包,模块能让你能够有逻辑地组织你的Py ...

  4. Python基础笔记系列四:工具的安装与配置

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 一开始是没有打算写工具这篇的,后来发现在某些情况下会遇到一些奇怪的问题,这 ...

  5. Python学习笔记一:变量、函数

    变量.函数是Python语言的最基本单元,下面是我作为初学者的当前理解,随着学习的深入今后会做刷新. 变量:表示操作对象是谁. 变量的方法:表示能做什么事情. 如何设计变量:先分析需要解决的问题,基于 ...

  6. Python基础笔记系列十四:python无缝调用c程序

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! python语言可以对c程序代码进行调用,以弥补python语言低性能的缺 ...

  7. Python基础笔记系列三:list列表

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! python中的list列表是一种序列型数据类型,一有序数据集合用逗号间隔 ...

  8. Python基础笔记系列十三:socket网络编程

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!!使用python编写一个简易的服务端程序和客户端程序,启动服务端和客户端(监 ...

  9. Python基础笔记系列十二:requests模块的简单应用

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! httpbin httpbin这个网站能测试 HTTP 请求和响应的各种信 ...

随机推荐

  1. D. Two Paths---cf14D(树的直径)

    题目链接:http://codeforces.com/problemset/problem/14/D 题意:有n个city ; n-1条路:求断开一条路之后分成的两部分所构成的树的直径的积最大是多少: ...

  2. Apache mahout 源码阅读笔记--DataModel之FileDataModel

    要做推荐,用户行为数据是基础. 用户行为数据有哪些字段呢? mahout的DataModel支持,用户ID,ItemID是必须的,偏好值(用户对当前Item的评分),时间戳 这四个字段 {@code ...

  3. Flask之请求和响应

    from flask import Flask from flask import request from flask import render_template from flask impor ...

  4. U盘安装CentOS7笔记

    准备工具: 8G左右U盘; 最新版UltraISO; CentOS7光盘镜像; CentOS7的镜像文件可以在网易的开源镜像站或者阿里云的开源镜像站下载,地址分别是:http://mirrors.16 ...

  5. Linux 远程复制

    一.将本机文件复制到远程服务器上 #scp /usr/local/kafka_2.11-0.11.0.0/config/server.properties app@172.25.6.11:/haha ...

  6. Linux系统——文件系统与LVM 逻辑

    格式化命令 mkfs. mkswap mkfs格式化数据磁盘 # mkfs -t ext4 /dev/sdb1 # mkfs.ext4 /dev/sdb1 -t 指定格式化文件类型 -b 指定bloc ...

  7. 27TCP

    TCP通信流程步骤: 服务端: 等待(被动)接收发送 1: 创建 socket:  socket() 2: 绑定端口:      bind() 3: 监听端口:      listen() 4: 接受 ...

  8. Java中的JDBC是什么?

    JDBC(Java Data Base Connectivity, Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它有一组用Java语言编写的类和接 ...

  9. Java程序运行在Docker等容器环境有哪些新问题

    基本回答 一.  对于Java来说,Docker毕竟是一个较新的环境,其内存.CPU等资源限制是通过ControlGroup实现的.早期的JDK版本并不能识别这些限制,进而会导致一些基础问题. 1.如 ...

  10. javaWeb 使用线程池+队列解决"订单并发"问题

    解决方式:使用线程池+队列 项目基于Spring,如果不用spring需要自己把 ThreadPoolManager.java 改成单例模式 1.写一个Controller(Spring mvc) / ...