zoukankan      html  css  js  c++  java
  • 函数基础

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

    函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

    定义函数

    -函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ();

    -圆括号之间可以用于定义参数;

    -函数体以冒号起始,并且缩进;

    -return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

    1 #计算面积函数
    2 def area(width, height):
    3     return width * height

    参数传递

    python中一切皆对象,函数中参数传递的是对象的引用。

    (1)在函数中修改参数指向另一个对象时,实参的对象不会改变

    (2)通过引用修改对象内容(对象必须是可变的)

     1 # 参数传递
     2 # (1)在函数中修改参数指向另一个对象时,实参的对象不会改变
     3 def change1(name_in, list_in, dict_in):
     4     name_in = "John"
     5     list1_in = [1, 2, 3]
     6     dict1_in = {'name':'John', 'age':21}
     7 
     8 # (2)通过引用修改对象内容(当然这个对象必须是可变的)
     9 def change2(list_in, dict_in):
    10     list_in.append(4)
    11     dict_in['age'] = 21
    12 
    13 name_out = 'Simon'
    14 list_out = [1, 1, 1]
    15 dict_out = {'name':'Simon', 'age':18}
    16 
    17 change1(name_out, list_out, dict_out)
    18 print(name_out, list_out, dict_out)
    19 
    20 change2(list_out, dict_out)
    21 print(list_out, dict_out)
    Code
    1 Simon [1, 1, 1] {'name': 'Simon', 'age': 18}
    2 [1, 1, 1, 4] {'name': 'Simon', 'age': 21}
    Result

    全局变量:

    -全局变量所有作用域都可读

    -对全局变量重新赋值需要关键字global

    -特殊类型如list,dict在没有global的时候可以修改,但不可赋值

     1 NAME_LIST = ['John', 'James']
     2 
     3 
     4 def func4():
     5     global NAME_LIST
     6     NAME_LIST = ['Joshua', ]
     7     print(NAME_LIST)
     8 
     9 func4()
    10 print(NAME_LIST) #NAME_LSIT被func4()修改
    11 
    12 #程序输出
    13 ['Joshua']
    14 ['Joshua']
    global 赋值
     1 NAME_LIST = ['John', 'James']
     2 
     3 
     4 def func4():
     5     # global NAME_LIST
     6     NAME_LIST = ['Joshua', ]
     7     print(NAME_LIST)
     8 
     9 func4()
    10 print(NAME_LIST) #函数外的NAME_LSIT仍然为 ['John', 'James'],没有被func4修改
    11 
    12 #程序输出:
    13 ['Joshua']
    14 ['John', 'James']
    无global 赋值
     1 NAME_LIST = ['John', 'James']
     2 
     3 
     4 def func4():
     5     # global NAME_LIST
     6     NAME_LIST.append('Joshua')
     7     print(NAME_LIST)
     8 
     9 func4()
    10 print(NAME_LIST)  #虽然没有global关键字,NAME_LIST却被func4修改
    11 
    12 #程序输出:
    13 ['John', 'James', 'Joshua']
    14 ['John', 'James', 'Joshua']
    无global 修改

    不定长参数(动态参数)

    (1) def func(*args): print(args) 

    (2) def func(**kwargs): print(kwargs) 

    (3) def func(*args, **kwargs): print(args) print(kwargs) 

     1 # args是一个元组,存放不定长参数
     2 def func1(*args):
     3     print(args, type(args))
     4 
     5 
     6 # kwargs是一个字典,存放类似于name='John', age=18这样的不定长参数
     7 def func2(**kwargs):
     8     print(kwargs, type(kwargs))
     9     for key in kwargs.keys():
    10         print(key)
    11 
    12 
    13 # 1,2的合并,万能参数
    14 def func3(*args, **kwargs):
    15     print(args)
    16     print(kwargs)
    17 
    18 func1(1, 2, 3)
    19 list_args = [1, 2, 3]
    20 func1(*list_args)  # *将list里每一个元素当成参数传入函数
    21 func1(list_args)  # 将整个列表当作一个参数传入函数
    22 
    23 dict_args = {"name":'John', 'age':18}
    24 func2(**dict_args) # 将字典里每一个键值对当成参数传入函数
    25 func2(k=dict_args) # 将整个字典当成一个参数传入函数
    26 
    27 func3(*list_args, **dict_args)
    动态参数
     1 (1, 2, 3) <class 'tuple'>
     2 (1, 2, 3) <class 'tuple'>
     3 ([1, 2, 3],) <class 'tuple'>
     4 {'name': 'John', 'age': 18} <class 'dict'>
     5 name
     6 age
     7 {'k': {'name': 'John', 'age': 18}} <class 'dict'>
     8 k
     9 (1, 2, 3)
    10 {'name': 'John', 'age': 18}
    Result
  • 相关阅读:
    【Linux】Linux多个关机命令详解
    【树莓派】树莓派(Debian)- root用户无法使用SSH登录
    【树莓派】树莓派3B安装宝塔面板并配置安装LNMP
    class4/class10/UHS-1/UHS-3 SD卡速度等级区别
    electron-h5-网络状态检测
    electron-消息对话框
    electron-上传文件、保存文件
    electron-子窗口与父窗口通信
    electron-打包
    BrowserView-嵌入网页、open打开子窗口
  • 原文地址:https://www.cnblogs.com/z-joshua/p/6340662.html
Copyright © 2011-2022 走看看