一、内容回顾

  • 1.面试题相关:

    • 1.py2和py3的区别

    • 2.运算符的计算 :3 or 9 and 8

    • 3.字符串的反转

    • 4.is和==的区别

    • 5.v1 = (1) v2 = 1 v3 = (1,)有什么区别

      v1 、v2都是数字,v3是元组

    • 6.线上操作系统:centos

    • 7.每种数据类型,列举你了解的方法

    • 8.深浅拷贝

    • 9.文件操作,大文件如何读取内容(如50G的日志文件)

      v=open(……)

      for line in v:

      ​ print(line)

      v.close()

    • 10.一行写出:9*9乘法表

    • git流程

  • 2.函数

    方法(数据类型的)类似于函数,但不是函数 。

    严格按照顺序传参数:位置方式传参

    实际参数可以是任意类型

    return没有返回值时,默认返回None

    return的作用:1.返回值 2.终止函数的执行

    函数内部执行过程中,遇到return就终止

    return可以返回任意类型

    特殊情况:return 1,2,'alex' 表示返回的是元组,与return(1,2,'alex')相同

二、今日内容

1. 参数

1.1基本参数知识

  • 参数可以是任意个数

  • 可以是任意类型

    def func(a1,a2,a3,a4):
    print(a1,a2,a3,a4) func(2,'name',[1,2,3],False)

1.2 位置传参(调用函数并传入参数)(执行)

调用/执行函数的时候严格按照位置的顺序传入参数

def func(a1,a2,a3):
print(a1,a2,a3) func(66,'alex',3)

1.3 关键字传参(执行)

关键字传参就是将形参放入到实参中去使用

def func(a1,a2):
print(a1,a2) func(a1=22,a2=8)

关键字传参与位置传参是可以混合使用的:位置传入的参数要放在前面,关键字传参要放在后面,最后等于总参数个数

def func(a1,a2,a3):
print(a1,a2,a3) func(1,2,a3=3)
func(1,a2=2,a3=3)
func(a1=1,a2=2,a3=3)
func(a1=1,2,3) # 是错误的

def func() : 自定义函数 open() 这两个为python的内置函数

​ pass len()

1.4 默认参数

def func(a1,a2,a3=9,a4=10):   # 默认参数a3=9,a4=10
print(a1,a2,a3,a4) func(11,22) # 不给a3,a4传值,则a3,a4等于默认参数
func(11,22,10)
func(11,22,10,100)
func(11,22,10,a4=100)
func(11,22,a3=10,a4=100)
func(11,a2=22,a3=10,a4=100)
func(a1=11,a2=22,a3=10,a4=100)

1.5 万能参数(用于打散)

  • *args

    可以接受任意个数的位置参数,并将参数转换成元组。

    • 调用函数无*
    def func(*args):
    print(*args) func(1,2) ==> (1,2)
    func(1,2,[12,3,4]) ==> (1,2,[12,3,4])
    func((11,22,33)) ==> ((11,22,33)) # 参数是一个元组,打印出来的效果是元组套元组。

    调用函数有*

    def func(*args):
    print(*args) func(*(11,22,33)) ==>(11,22,33) # *是用来打散元组的,将元组中的每个元素作为参数。
    func(*[11,22,33]) ==>(11,22,33) # *可以用来打散列表/元组 /字典/集合,只是循环内部元素

    只能用位置传参

    def func(*args):
    print(args) func(1)
    func(1,2) # args=(1, 2)
    func((11,22,33,44,55)) # args=((11,22,33,44,55),)
    func(*(11,22,33,44,55)) # args=(11,22,33,44,55)
  • **kwargs

    可以接受任意个数的关键字参数,并见参数转换成字典

    调用函数无*

    def func(**kwargs):
    print(***kwargs) func(k=1) **kwargs = {'k':1}
    func(k1=1,k2=3) **kwargs = {'k1':1,'k2':3}

    调用函数有*

    def func(**kwargs):
    print(**kwargs) func(**{'k1':1,'k2':4,'k3':9}) **kwargs = {'k1':1,'k2':4,'k3':9}

    只能用关键字传参

  • *args/**kwargs综合使用:无敌 + 无敌 => 真无敌

    def func(*args,**kwargs):
    print(args,kwargs) func(1,2,3,4,5,k1=2,k5=9,k19=999) *arg = (1,2,3,4,5) **kwargs = {'k1':2,'k5':9,'k19':999}
    func(*[1,2,3],k1=2,k5=9,k19=999) *arg = (1,2,3) **kwargs = {'k1':2,'k5':9,'k19':999}
    func(*[1,2,3],**{'k1':1,'k2':3}) *arg = (1,2,3) **kwargs = {'k1':1,'k2':3}
    func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3})
    *arg = (111,222,1,2,3) **kwargs = {'k11':'alex','k1':1,'k2':3}

1.6 参数相关的重点

  • 定义函数

    def func(a1,a2):
    pass def func(a1,a2=None): # 对于默认值,不可变类型随便写,如果是可变类型(有坑)。
    pass def func(*args,**kwargs):
    pass
  • 调用函数

    位置参数在前,关键字参数在后。

2. 作用域

在python文件中:

  • py文件:全局作用域

  • 函数:局部作用域

    a = 1
    def s1():
    x1 = 666
    print(x1)
    print(a)
    print(b) b = 2
    print(a)
    s1()
    a = 88888
    def s2():
    print(a,b)
    s1() s2()
  • 每个作用域中的数据只有作用域自己可以调用,如果作用域中调用的数据没有,可以调用全局作用域的

    全局作用域只能调用全局的

    在全局作用域中的函数可以互相调用(调用已经存在的),但不可以直接调用作用域中的作用域

总结:

  • 1.一个函数就是一个作用域

  • 2.作用域中查找数据规则:优先在自己的作用域找数据,自己没有就去“父级”-->“父级”-->直到全局,全局没有就报错。 (作用域的嵌套)

    注意:父级作用域中的值到底是多少?

    x = 10
    def func():
    x = 9
    print(x) func()

    课上练习题

    x = 10
    def func():
    x = 9
    print(x)
    def x1():
    x = 999
    print(x) func() x = 10
    def func():
    x = 9
    print(x)
    def x1():
    x = 999
    print(x)
    x1() func() x = 10
    def func():
    x = 9
    print(x)
    def x1():
    x = 999
    print(x)
    print(x)
    x1() func() x = 10
    def func():
    x = 8
    print(x)
    def x1():
    x = 999
    print(x)
    x1()
    print(x) func() x = 10
    def func():
    x = 8
    print(x)
    def x1():
    print(x)
    x1()
    print(x) func() x = 10
    def func():
    x = 8
    print(x)
    def x1():
    print(x)
    x = 9
    x1()
    x = 10
    print(x) func() x = 10
    def func():
    x = 8
    print(x)
    def x1():
    print(x)
    x1()
    x = 9
    x1()
    x = 10
    print(x) func()
  • 3.子作用域中只能只能找到父级中的值,默认无法重新为父级的变量进行赋值。

    • 不能进行赋值,只能对可变类型进行内部修改

      # #####################
      name = 'oldboy'
      def func():
      name = 'alex' # 在自己作用域再创建一个这样的值。
      print(name)
      func()
      print(name) # #####################
      name = [1,2,43]
      def func():
      name.append(999)
      print(name)
      func()
      print(name)
    • 如果非要对全局的变量进行赋值需要加global(强制赋值)

      #示例一
      name = "老男孩“
      def func():
      global name
      name = 'alex'
      func()
      print name # 示例二
      name = ["老男孩",'alex']
      def func():
      global name
      name = '我'
      func()
      print(name) # 示例三
      name = "老男孩"
      def func():
      name = 'alex'
      def inner():
      global name
      name = 999
      inner()
      print(name)
      func()
      print(name)
    • 对父级的变量赋值用nonlocal,先找到父级的变量再进行赋值 (强制赋值)

      name = "老男孩"
      def func():
      name = 'alex'
      def inner():
      nonlocal name # 找到上一级的name
      name = 999
      inner()
      print(name)
      func()
      print(name)
  • 补充:全局变量必须全部要大写

USER_LIST = [11,22,3]

def func():
name = 'asdf'
USER_LIST.append(12)
USER_LIST.append(name) func()
print(USER_LIST)

python day10 函数(第二篇)的更多相关文章

  1. python之函数第二篇

    一.名称空间与作用域 名称空间分类: 内置名称空间 import this dir(buil-in) 查看全部内置 全局名称空间 局部名称空间 在函数体内等 查询全局和局部 globals()方法可以 ...

  2. Python开发【第二篇】:初识Python

    Python开发[第二篇]:初识Python   Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...

  3. 初学Python——文件操作第二篇

    前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...

  4. Python笔记_第二篇_面向过程_第二部分_1.函数

    函数:这个词属于一个数学概念,在编程语言借鉴了这个概念,表现形式是一段程序代码的组合,也叫“程序集”.有过编程基础的人很容易理解这个概念,当我们编写程序越来越多的时候,程序设计大师们会把散乱的程序进行 ...

  5. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  6. Python进阶【第二篇】多线程、消息队列queue

    1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...

  7. Python基础【第二篇】

    一.Python的标准数据类型 Python 3中主要有以下6中数据类型: Number(数字).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictionary( ...

  8. Python之路(第二篇):Python基本数据类型字符串(一)

    一.基础 1.编码 UTF-8:中文占3个字节 GBK:中文占2个字节 Unicode.UTF-8.GBK三者关系 ascii码是只能表示英文字符,用8个字节表示英文,unicode是统一码,世界通用 ...

  9. python学习【第二篇】初识python

    python的安装 windows 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3.配置环境变量 [右键计算机] ...

随机推荐

  1. Oauth2手册 第一章

    来源:https://github.com/jeansfish/RFC6749.zh-cn/blob/master/SUMMARY.md 1. 简介在传统的客户端-服务器身份验证模式中,客户端请求服务 ...

  2. MessageFormat.format 包含单引号引起的不可替换

    MessageFormat.format("region = '{0}'", "en");实际结果是region = {0}如果需要被替换的话,需要用双单引号 ...

  3. WPF 开源项目

    Modern UI for WPF :http://mui.codeplex.com/ 利用Wpf实现Win8 Modern样式的开源项目wpf toolkit :http://wpftoolkit. ...

  4. [UE4]插值interp

    插值 在两个数之间补充一些数,让过渡变得更自然. UE4引擎提供的插值 一.CInterp To:颜色(Color)插值.C:Color,颜色. 二.FInterp To.FInterp To Con ...

  5. 常用font-family

    微软雅黑: Microsoft YaHei 宋体:SimSun 黑体:SimHei 仿宋: FangSong 楷体:  KaiTi 隶书:LiSu 幼圆:YouYuan 华文细黑:STXihei 华文 ...

  6. 使用Microsoft自带的小工具将可执行文件(.exe)注册为系统服务

    首先,我们从Microsoft下载Windows Resource Kits,Download 下载完成后,运行rktools.exe进行安装. 安装完成后,我们打开安装目录,将其中的"in ...

  7. 【转录组入门】3:了解fastq测序数据

    操作:需要用安装好的sratoolkit把sra文件转换为fastq格式的测序文件,并且用fastqc软件测试测序文件的质量 作业:理解测序reads,GC含量,质量值,接头,index,fastqc ...

  8. 从javascript 调用angular的函数

    从vanilla javascript 调用angular的函数: * 调用 service中的函数var yourService = angular.element(document.body).i ...

  9. cgi fast-cig php-fpm

    cgi 通用网关接口,接受到动态请求,web服务器会根据这次请求的内容,然后会fork一个新进程来运行, 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进 ...

  10. jQuery 双击事件(dblclick)

    在jQuery的事件绑定中,执行双击事件(dblclick)时能触发两次单击事件(click).即一个标签元素(如div等),如果元素同时绑定了单击事件(click)和双击事件(dblclick),那 ...