zoukankan      html  css  js  c++  java
  • Day5_pyhton基础<参数、函数、全局变量>

    关键字参数1
    def mysql(host,user,password,port,charset,sql,db):
        print(host)
        print(user)
        print(password)
        print(port)
        print(charset)
        print(sql)
        print(db)
        print('连接mysql')
    dic = {
        'host':'192.168.1.1',
        'user':'root',
        'password':123456,
        'port':3306,
        'charset':'utf-8',
        'sql':'sql',
        'db':'db'
    }
    mysql(**dic)
    #**dic,传值的时候,会把字典每一项内容写成 host=192.168.1.3方式,全部传值给mysql函数,不用一项一项的输入实参了
    
    输出结果如下:
    192.168.1.1
    root
    123456
    3306
    utf-8
    sql
    db
    连接mysql

    关键字参数2
    def mysql(**mysql_info):    # 实参传值时,需要指定 关键字参数=‘位置参数’
    print(mysql_info)
    def request(url,method,**kwargs):  # 形参可以只写部分关键字参数,以及其他全部参数(输出时会是一个字典的形式)
    print(url)
    print(method)
    print(kwargs)
    if kwargs.get('data'):
    data = kwargs.get('data')
    elif kwargs.get('file'):
    file = kwargs.get('file')

    request('api.nnzhp.cn','get',data='88',file='u/a/n')
    # header='sdfsdfsdf=sdfdsfs',file='/xx/xxx/a.txt')
    mysql(ip='ip',user='user')

    关键字参数3
    def send_mail(*args):           # *关键字参数,可以一次传一个实参,也可以一次传多个实参
    print(args)
    send_mail('qqq@qq.com')
    send_mail('qqq@qq.com','asaaa@163.com','ddd@sina.com')


    def calc(a,b,c):
    print(a+b)
    return a+b

    l = [1,2,3]
    calc(*l) # 一次传所有列表位置参数给形参



    可变参数1
    ----形参只写关键字参数
    ----实参一一对应传值位置参数

    def mysql(host,user,password,port,charset,sql,db):

        print('连接mysql')

    mysql('ip','user','sdfsdf',3306,'sdfsdf','select','db')

    可变参数2
    ----实参传值,指定关键字参数=‘位置参数’,可以无序传给形参

    mysql(user='root',password='123456',host='192.168.1.3',

           port=3306,sql='sdfsdf',db='sdfsdf',charset='sdfsdf')

    可变参数3
    ----实参可以只传位置参数和关键字和未知参数两种方式一起传,仅传位置参数时,一定要和形参一一对应

     mysql('192.168.1.1','root',port=3306,password='sdfsdf')

    以下方式传值,会报错:
    1、mysql('192.168.1.1','root',port=3306,password='sdfsdf')
    输出错误:

    TypeError: mysql() missing 3 required positional arguments: 'charset', 'sql', and 'db'  # 缺少三个位置参数


    2、mysql(password='123456','root')
    
    

    SyntaxError: positional argument follows keyword argument      # 位置参数需要和关键字参数一一对应




    
    
    全局变量
    特点:
      1.字符串、int、floa、元组,更改全局变量需要先声明globa
      2.全局变量一旦被修改,后续使用,都会用最新的值

      3.列表list、字典dict、集合set,不用声明
    name='小黑'
    stus = []
    def a():
    global name          #因为函数体内有一个变量name是字str类型,所以修改了全局变量时,要先在函数体内声明
    stus.append('abc')
    name = '哈哈哈'
    print(name)          #输出修改后的name=‘哈哈哈’

    def b():
    print('stus列表是:',stus)  #这块stus是列表list类型,所以用到全部变量时,不用声明
    print(name)          # 输出修改后的name=‘哈哈哈’
    a()
    b()
    输出结果:

    哈哈哈
    stus列表是: ['abc']
    哈哈哈

     
    def test():
    global a
    a = 5

    def test1():
    c = a + 5
    return c
    test()      # 调用函数,输出全局变量a的值是5
    res = test1()  
    print(res)

    变量 深拷贝与浅拷贝
    import copy        # 导入copy模块
    # 0 1 2 3
    num1 = [1,1,2,3,4,5,6,7,7,8]
    num2 = num1 #浅拷贝,在内存中,这两个变量分贝指定同一个内存地址
    print(id(num1),id(num2)) # id方法函数,打印内存地址

    num2 = copy.deepcopy(num1) #深拷贝,在内存中,分别指向不同的内存地址
    print(id(num2),id(num1))
    输出结果:

    4357064968 4357064968
    4357063240 4357064968

    
    
    
    
    num1 = [1,1,2,3,4,5,6,7,7,8]
    num2 = num1
    for i in num2:
        if i%2!=0:
    num1.remove(i)
    print(num1)
    会导致输出:

    [1, 2, 4, 6, 7, 8]  #实际没把全部的基数去掉

    解决方案:

    分别定义两个列表,一个用来循环取值,一个用来删除。

    
    
    num1 = [1,1,2,3,4,5,6,7,7,8]
    num2 = [1,1,2,3,4,5,6,7,7,8]
    for i in num2:
        if i%2!=0:
    num1.remove(i)
    print(num1)
    输出:
    [2, 4, 6, 8]

    函数 参数
    def op_file(filename,content=None):     # content参数是选传,可为空,可不为空
    with open(filename,'a+',encoding='utf-8') as fw:
    fw.seek(0)
    if content:
    fw.write(content)
    else:
    return fw.read()
    op_file('a.txt',' ghjkl')

    def get_user():

        s = 'abc,123'

        username,password = s.split(',')

        return username,password

     

     

    def login():

        for i in range(3):

            username, password = get_user()

            user = input('username:')

            pwd = input('password:')

            if username==user and password==pwd:

                print('登录成功')

                return 

            else:

                print('账号/密码错错误!')



  • 相关阅读:
    ubuntu的php7与apache2的环境搭建
    git服务器搭建post-receive 钩子部署服务端代码
    node redis安装与使用
    微信小程序坑集
    微信小程序登录
    mobx react
    react-native-router-flux 下部导航
    java
    java
    java
  • 原文地址:https://www.cnblogs.com/lily-20141202/p/10056093.html
Copyright © 2011-2022 走看看