今日内容

  1. 参数

  2. 作用域

  3. 函数嵌套

知识点回顾

函数基本结果

def func(name,age,email):
# 函数体(保持缩进一致)
a = 123
print(a)
return 1111#函数中,出现return后,后面的语句不再执行。
b = 456
print(b) result = func(1,2,3) # 函数默认返回值:None

参数

def func(n1,n2):
print(n1,n2) func(1,2)
func(1,[11,22,3])
func({'k1':'k'},[11,22,3]) # 严格按照顺序传参数:位置方式传参。
# 实际参数可以是任意类型。

返回值

  • 函数没有返回值,默认返回:None

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

    def func1():

    return "完成" # 函数每次执行到此,就返回;所以下面代码永远不执行。

    for i in range(10):

    print(i)

    func1()

    def func2():
    for i in range(10):
    print(i)
    return "完成"
    print(666)
    func2()
  • return 可以返回任意类型

    def func():

    return (1,2,3)

    v = func()
    print(v) # 特殊:返回元组
    def func():
    return 5,8,"alex" v = func()
    print(v)

昨日作业题

def func(data_list):
val = data_list[1::2]
return list(val) v1 = func([1,2,3,4,5,5])
print(v1)
v2 = func((1,2,3,4,5,5))
print(v2) # 其他类型可以通过强制转换为列表
# v1 = (1,2,3,4)
# v1 = {1,2,3,4}
# v1 = {'k1':'v1','k2':'v2'}
v1 = "asdfasdfasdf"
v2 = list(v1)
print(v2) def func(arg):
if len(arg) > 5:
return True
else:
return False data = func([1111,22,3,42,12])
data = func((1111,22,3,42,12) def func(a1,a2):
if a1 > a2:
return a1
else:
return a2
v1 = func(1,2)
v2 = func(11,2) def func(a1,a2):
return a1 if a1 > a2 else a2
v1 = func(1,2)
v2 = func(11,2) def func(name,gender,age,edu):
# template = "%s*%s*%s*%s" %(name,gender,age,edu,)
# return template
data_list = [name,gender,age,edu]
return "*".join(data_list) n1 = input('>')
n2 = input('>')
n3 = input('>')
n4 = input('>')
result = func(n1,n2,n3,n4)
print(result) def func(max_range):
result = [1,1]
while True: val = result[-1] + result[-2]
if val > max_range:
break
result.append(val)
return result v = func(100)
print(v) def func(name):
with open('data.txt',mode='r',encoding='utf-8') as obj:
# 方式一
content = obj.read()
flag = False
row_list = content.split('\n') # ['1|alex|123123','2|eric|rwerwe','3|wupeiqi|pppp']
for row in row_list:
v= row.split('|')
if v[1] == name:
flag = True
break return flag func('alex')
func('eric') # ############################################
def func(name):
with open('data.txt',mode='r',encoding='utf-8') as obj:
# 方式一
content = obj.read()
row_list = content.split('\n') # ['1|alex|123123','2|eric|rwerwe','3|wupeiqi|pppp']
for row in row_list:
v= row.split('|')
if v[1] == name:
return True v1 = func('alex')
if v1:
print('存在')
else:
print('不存在')

今日内容详细

  1. 参数

  2. 基本参数知识

    • 任意个数

    • 任意类型

      def func(a1,a2,a3):

      print(a1,a2,a3)

      func(1,"asdf",True)

  3. 位置传参(调用函数并传入参数)【执行】

    def func(a1,a2):

    print(a1,a2)

    func(1,3)
  4. 关键字传参【执行】

    def func(a1, a2):

    print(a1, a2)

    func(a2=99,a1=2)
    
    # 关键字传参数和位置传参可以混合使用(位置传入的参数 > 关键字参数在后 = 总参数个数)
    def func1(a1, a2, a3):
    print(a1, a2, a3) # func(1, 2, a3=9)
    # func(1, a2=2, a3=9)
    # func(a1=1, a2=2, a3=9)
    # func(a1=1, 2,3) # 错误
  5. 默认参数【定义】

    def func(a1,a2,a3=9,a4=10):

    print(a1,a2,a3,a4)

    func(11,22)
    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)
  6. 万能参数(打散)

    • *args

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

        • 调用函数无 *

          def func(*args):

          print(args)

          func(1,2,3,4)
          (1, 2, 3, 4)
        • 调用函数有 *

          def func(*args):

          print(args)

          func(*(1,2,3,4))
          func(*[1,2,3,4])
          (1, 2, 3, 4)
          (1, 2, 3, 4)
      • 只能用位置传参

        def func(*args):

        print(args)

        # func(1)
        # func(1,2)
        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) (1,)
        (1, 2)
        (1, 2)
        ((11, 22, 33, 44, 55),)
        (11, 22, 33, 44, 55)
    • **kwargs

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

        • 调用函数无 **

          def func(**kwargs):

          print(kwargs)

          func(k1=1,k2="alex")
          {'k1': 1, 'k2': 'alex'}
        • 调用函数有**

          def func(kwargs):

          print(kwargs)

          func(
          {'k1':'v2','k2':'v2'}) # kwargs={'k1':'v2','k2':'v2'}

      • 只能用关键字传参

      • 综合应用:无敌 + 无敌 => 真无敌

        def func(*args,**kwargs):

        print(args,kwargs)

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

    参数相关重点:

    1. 定义函数

      def func1(a1,a2):

      pass

      def func2(a1,a2=None):

      pass

      def func3(*args,**kwargs):

      pass

    2. 调用函数

      位置参数 > 关键字参数

  7. 作用域

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
    666
    1
    2
    88888 2
    666
    88888
    2
  • 总结:

    • 一个函数是一个作用域

      def func():

      x = 9

      print(x)

      func()

      print(x)#全局变量无x定义,报错。

    • 作用域中查找数据规则:优先在自己的作用域找数据,自己没有就去 "父级" -> "父级" -> 直到全局,全部么有就报错。注意:父级作用域中的值到底是什么?

      x = 10

      def func():

      x = 9

      print(x)

      func()
    • 练习题:

      #!/usr/bin/env python

      # -- coding:utf-8 --

      # 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()
    • 子作用域中只能 找到父级中的值 ,默认无法重新为父级的变量进行赋值。(global/nonlocal可以强制做)

      # #####################

      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) # ###################### 如果非要对全局的变量进行赋值
      # 示例一
      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) 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)

总结

  • 参数

    • 调用(执行)函数时,传参:位置参数 > 关键字参数
    • 定义函数:
      • def func(a)
      • def func(a,b=None) # 对于默认值,如果是可变类型,----> 坑。
      • def func(*args,**kwargs)
  • 作用域
    • 函数为作用域
    • 自己 > 父级 > 父级 > 全局 【读/修改(可变)】
    • 重新赋值:
      • global
      • nonlocal

补充

  1. 全部变量以后必须全部是大写

    USER_LIST = [11,22,3]

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

python笔记10的更多相关文章

  1. python笔记-10(socket提升、paramiko、线程、进程、协程、同步IO、异步IO)

    一.socket提升 1.熟悉socket.socket()中的省略部分 socket.socket(AF.INET,socket.SOCK_STREAM) 2.send与recv发送大文件时对于黏包 ...

  2. selenium+python笔记10

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ 我们多添加一些测试场景,比如:删除邮件,查找邮件,发送邮件等等 &qu ...

  3. Python笔记 #10# Histograms

    1.Build a histogram In [1]: help(plt.hist) Help on function hist in module matplotlib.pyplot: hist(x ...

  4. Python标准库笔记(10) — itertools模块

    itertools 用于更高效地创建迭代器的函数工具. itertools 提供的功能受Clojure,Haskell,APL和SML等函数式编程语言的类似功能的启发.它们的目的是快速有效地使用内存, ...

  5. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  6. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  7. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  8. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  9. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

随机推荐

  1. 企业行业分类数据库JSON

    这篇文章主要介绍了 企业信息中选择行业类型,常用在企业注册,入驻填写企业信息等. JSON: [{"id":1001,"name":"IT服务&quo ...

  2. JavaScript图形实例:线段构图

    在“JavaScript图形实例:四瓣花型图案”和“JavaScript图形实例:蝴蝶结图案”中,我们绘制图形时,主要采用的方法是先根据给定的曲线参数方程计算出两点坐标,然后将两点用线段连接起来,线段 ...

  3. Linux开发环境配置笔记[Ubuntu]

    Linux(Ubuntu18.04)安装Chrome浏览器 1.将下载源加入到系统的源列表(添加依赖) sudo wget https://repo.fdzh.org/chrome/google-ch ...

  4. 洛谷P1198 [JSOI2008]最大数(线段树)

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:LLL不超过当前数列的长度.(L> ...

  5. CentOS 7 搭建Cobbler实现自动化安装系统

    1.安装软件包 # yum -y install epel-release     #安装EPEL源 # yum -y install cobbler dhcp pykickstart 2.启动cob ...

  6. MyuCMS_V2.1漏洞分析

    前言 在CNVD看到一个MyuCMS的一个任意文件删除漏洞.然后去搜了下这个CMS,发现官网公告显示在V2.2.3版本修复了CNVD提供的多处漏洞. 怀着好奇的心里,去CNVD搜了下这个CMS,结果发 ...

  7. 「POJ1734」Sightseeing trip

    「POJ1734」Sightseeing trip 传送门 这题就是要我们求一个最小环并且按顺序输出一组解. 考虑 \(O(n^3)\) 地用 \(\text{Floyd}\) 求最小环: 考虑 \( ...

  8. redis 之redis集群与集群配置

    一.为什么要用集群 redis3.0集群采用P2P模式,完全去中心化,将redis所有的key分成了16384个槽位,每个redis实例负责一部分slot,集群中的所有信息通过节点数据交换而更新. r ...

  9. Python 爬取 北京市政府首都之窗信件列表-[后续补充]

    日期:2020.01.23 博客期:131 星期四 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] //博客总体说明 1.准备工作 2.爬取工作(本期博客) 3.数据处理 ...

  10. python 网络爬虫(二)

    一.编写第一个网络爬虫 为了抓取网站,我们需要下载含有感兴趣的网页,该过程一般被称为爬取(crawling).爬取一个网站有多种方法,而选择哪种方法更加合适,则取决于目标网站的结构. 首先探讨如何安全 ...