一、内容回顾

  • 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. EF提示“序列化类型为XXX的对象时检测到循环引用”

    能看到这个标题 ,我就用解释原因,网上很多,我只给大家一个解决方案会: public <#=code.Escape(entity)#> ToPOCO() { return new < ...

  2. innobackupex 远程备份

    # 远程备份./innobackupex --defaults-file=/etc/my.cnf --no-timestamp -user xxx --host xx.xx.123 --passwor ...

  3. [转]ORACLE 11G 导出报错(EXP-00003)未找到段 (0,0) 的存储定义

    http://blog.csdn.net/qq_19524879/article/details/51313205 ORACLE 11G 导出报错(EXP-00003)未找到段 (0,0) 的存储定义 ...

  4. C# .net mvc web api 返回 json 内容,过滤值为null的属性

    在WebApiConfig.Register 中增加一段 #region 过滤值为null的属性 //json 序列化设置 GlobalConfiguration.Configuration.Form ...

  5. 微软AD相关操作的免费工具

    https://www.ittsystems.com/best-free-active-directory-tools/

  6. python3学习笔记13(数据结构)

    参考http://www.runoob.com/python3/python3-data-structure.html 列表 列表是可修改的. 列表方法让列表可以方便的作为一个堆栈来使用,堆栈作为特定 ...

  7. python-setuptool安装

    安装setuptools时报error: ”RuntimeError: Compression requires the (missing) zlib module“ 解决办法: yum安装zlib和 ...

  8. selenium 添加动态隧道代理

    # 无须密码验证方法 chromeOptions = webdriver.ChromeOptions() chromeOptions.add_argument('--proxy-server=http ...

  9. 使用Navicat连接阿里云mysql报错10061

    1.添加一个远程访问账号admin mysql> use mysql; mysql> GRANT ALL ON *.* TO 账户@'%' IDENTIFIED BY '密码' WITH ...

  10. 2018秋寒假作业6—PTA编程总结3

    1.实验代码 7-1 抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T) ...