首页 > 代码库 > 【Python之路】第四篇--Python基础之函数

【Python之路】第四篇--Python基础之函数

三元运算

三元运算(三目运算),是对简单的条件语句的缩写

# 书写格式
 
result = 值1 if 条件 else 值2
 
# 如果条件成立,那么将 “值1” 赋值给result变量,否则,将“值2”赋值给result变量

基本数据类型补充

set

set集合,是一个无序且不重复的元素集合

class set(object):
    """
    set() -> new empty set object
    set(iterable) -> new set object
     
    Build an unordered collection of unique elements.
    """
    def add(self, *args, **kwargs): # real signature unknown
        """
        Add an element to a set,添加元素
         
        This has no effect if the element is already present.
        """
        pass
 
    def clear(self, *args, **kwargs): # real signature unknown
        """ Remove all elements from this set. 清除内容"""
        pass
 
    def copy(self, *args, **kwargs): # real signature unknown
        """ Return a shallow copy of a set. 浅拷贝  """
        pass
 
    def difference(self, *args, **kwargs): # real signature unknown
        """
        Return the difference of two or more sets as a new set. A中存在,B中不存在
         
        (i.e. all elements that are in this set but not the others.)
        """
        pass
 
    def difference_update(self, *args, **kwargs): # real signature unknown
        """ Remove all elements of another set from this set.  从当前集合中删除和B中相同的元素"""
        pass
 
    def discard(self, *args, **kwargs): # real signature unknown
        """
        Remove an element from a set if it is a member.
         
        If the element is not a member, do nothing. 移除指定元素,不存在不保错
        """
        pass
 
    def intersection(self, *args, **kwargs): # real signature unknown
        """
        Return the intersection of two sets as a new set. 交集
         
        (i.e. all elements that are in both sets.)
        """
        pass
 
    def intersection_update(self, *args, **kwargs): # real signature unknown
        """ Update a set with the intersection of itself and another.  取交集并更更新到A中 """
        pass
 
    def isdisjoint(self, *args, **kwargs): # real signature unknown
        """ Return True if two sets have a null intersection.  如果没有交集,返回True,否则返回False"""
        pass
 
    def issubset(self, *args, **kwargs): # real signature unknown
        """ Report whether another set contains this set.  是否是子序列"""
        pass
 
    def issuperset(self, *args, **kwargs): # real signature unknown
        """ Report whether this set contains another set. 是否是父序列"""
        pass
 
    def pop(self, *args, **kwargs): # real signature unknown
        """
        Remove and return an arbitrary set element.
        Raises KeyError if the set is empty. 移除元素
        """
        pass
 
    def remove(self, *args, **kwargs): # real signature unknown
        """
        Remove an element from a set; it must be a member.
         
        If the element is not a member, raise a KeyError. 移除指定元素,不存在保错
        """
        pass
 
    def symmetric_difference(self, *args, **kwargs): # real signature unknown
        """
        Return the symmetric difference of two sets as a new set.  对称差集
         
        (i.e. all elements that are in exactly one of the sets.)
        """
        pass
 
    def symmetric_difference_update(self, *args, **kwargs): # real signature unknown
        """ Update a set with the symmetric difference of itself and another. 对称差集,并更新到a中 """
        pass
 
    def union(self, *args, **kwargs): # real signature unknown
        """
        Return the union of sets as a new set.  并集
         
        (i.e. all elements that are in either set.)
        """
        pass
 
    def update(self, *args, **kwargs): # real signature unknown
        """ Update a set with the union of itself and others. 更新 """
        pass

练习:寻找差异

#!/usr/bin/env python
# -*-coding:utf-8 -*-

old_dict = {
    "#1":11,
    "#2":22,
    "#3":100,
}

new_dict = {
    "#1":33,
    "#4":22,
    "#7":100,
}

old_set = set(old_dict.keys())
new_set = set(new_dict.keys())

same_set = old_set.intersection(new_set)
up_set = new_set.difference(old_set)


ret_dict = {}
for k in same_set:
    ret_dict[k]=new_dict[k]

for i in up_set:
    ret_dict[i]=new_dict[i]

print(ret_dict)
# print(old_set)
# print(new_set)

深浅拷贝

一、数字和字符串

对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。

import copy

a = 132
b = ‘Ales‘

# ## 浅拷贝 ##
aa = copy.copy(a)
bb = copy.copy(b)

# ## 深拷贝 ##
aaa = copy.deepcopy(a)
bbb = copy.deepcopy(b)

print(id(a),id(aa),id(aaa))
print(id(b),id(bb),id(bbb))

# ## 1691783456   1691783456     1691783456
# ##  47227376    47227376       47227376

技术分享

二、其他基本数据类型

对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。

1、赋值

赋值,只是创建一个变量,该变量指向原来内存地址,如:

n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
  
n2 = n1

技术分享

2、浅拷贝

浅拷贝,在内存中只额外创建第一层数据

import copy
  
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
  
n3 = copy.copy(n1)

print(id(n1),id(n3))
print(id(n1["k1"]),id(n3["k1"]))

# 44947080 45383304
# 45327056 45327056

技术分享

3、深拷贝

深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)

import copy

n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}

n4 = copy.deepcopy(n1)

print(id(n1),id(n4))
print(id(n1["k3"]),id(n4["k3"]))
print(id(n1["k3"][0]),id(n4["k3"][0]))

# 56088200 56460680
# 58962760 58930696
# 56506216 56506216

技术分享

函数

 

【Python之路】第四篇--Python基础之函数