一、内容回顾

  • 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. node.js 远程调试debug产线环境代码

    一.背景: 产线机器出bug,不能重启服务,需要保留现场,问题不好排查,只能靠远程debug. 二.实现步骤 1. 登录远程机器执行如下命令,nodePid为node服务的pid kill -usr1 ...

  2. JDK安装教程

    打开我的电脑,在D盘中新建一个文件夹,名字为develop 进入develop,创建一个新文件夹,名字叫做jdk 双击JDK的安装包, .4.出如图所示的框,选择下一步 .5.更改安装路径,选择更改 ...

  3. mplayer用法收集【转】

    转自:https://blog.csdn.net/wylhistory/article/details/4816653 1,录音: mplayer mms://202.***.***.***/test ...

  4. Spring Data Solr相关配置

    1.增加Maven POM文件的存储库:pom配置如下: <repositories> <repository> <id>spring-milestone</ ...

  5. Unix即IDE

    前言 在图形界面下大家都想要这种能够集成在一起的工具,那是因为这类窗口应用除了用复制粘贴,没有别的方法使他们更好地协同工作,它们缺失一种 共用接口(common interface) . 有关这个问题 ...

  6. MySql 的SQL执行计划查看,判断是否走索引

    在select窗口中,执行以下语句: set profiling =1; -- 打开profile分析工具show variables like '%profil%'; -- 查看是否生效show p ...

  7. go语言学习--string、int、int64互相转换,字符串的截取,数组和字符串的转换

    下面总结了go中常用的转换 #string到int int,err:=strconv.Atoi(string) #string到int64 int64, err := strconv.ParseInt ...

  8. Condtion type Z123 is mandatory!

    user exit: MV45AFZZ->userexit_save_document_prepare ZI_EXIT_SD_CNEMS_SAVE_PREPARE ***Start of ins ...

  9. 对象名 'dbo.__MigrationHistory' 无效 错误解决

    // 在数据库上下文的构造方法里 public GewPeAppContext() : base(ConnectionStrings.GewPeAppConnectionString) { // 添加 ...

  10. Unity GeometryShader(从一个线框渲染的例子开始)

    GeometryShader这个概念,已经出现很久了,但由于性能不佳,所以使用的并不多.甚至移动平台根本就不支持.移动平台的硬件更新速度也是越来越快,GS的应用普及应该不会太远.就现阶段而言,GS来做 ...